Micron Document
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| SparkN0de-git | SparkN0de |
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------


Displaying Raw • Download


sbapp/ui/voice.py 2.0.0 (cf698d96) Text, 45.75 KB

T8b949e# Copyright (c) 2026 Mark Qvist - See LICENSE.md and README.md

Tff7b72import T7ee787time
Tff7b72import T7ee787RNS

Tff7b72from T7ee787typing Tff7b72import Te6edf3Union
Tff7b72from T7ee787kivyT7ee787.T7ee787metrics Tff7b72import Te6edf3dpTb4b4b4,Te6edf3sp
Tff7b72from T7ee787kivyT7ee787.T7ee787langT7ee787.T7ee787builder Tff7b72import Te6edf3Builder
Tff7b72from T7ee787kivyT7ee787.T7ee787coreT7ee787.T7ee787clipboard Tff7b72import Te6edf3Clipboard
Tff7b72from T7ee787kivyT7ee787.T7ee787utils Tff7b72import Te6edf3escape_markup
Tff7b72from T7ee787kivymdT7ee787.T7ee787uixT7ee787.T7ee787recycleview Tff7b72import Te6edf3MDRecycleView
Tff7b72from T7ee787kivymdT7ee787.T7ee787uixT7ee787.T7ee787list Tff7b72import Te6edf3OneLineIconListItem
Tff7b72from T7ee787kivymdT7ee787.T7ee787uixT7ee787.T7ee787pickers Tff7b72import Te6edf3MDColorPicker
Tff7b72from T7ee787kivymdT7ee787.T7ee787uixT7ee787.T7ee787button Tff7b72import Te6edf3MDRectangleFlatButton
Tff7b72from T7ee787kivymdT7ee787.T7ee787uixT7ee787.T7ee787button Tff7b72import Te6edf3MDRectangleFlatIconButton
Tff7b72from T7ee787kivymdT7ee787.T7ee787uixT7ee787.T7ee787dialog Tff7b72import Te6edf3MDDialog
Tff7b72from T7ee787kivyT7ee787.T7ee787properties Tff7b72import Te6edf3StringPropertyTb4b4b4, Te6edf3BooleanPropertyTb4b4b4, Te6edf3OptionPropertyTb4b4b4, Te6edf3ColorPropertyTb4b4b4, Te6edf3Property
Tff7b72from T7ee787kivymdT7ee787.T7ee787uixT7ee787.T7ee787list Tff7b72import Te6edf3MDListTb4b4b4, Te6edf3IconLeftWidgetTb4b4b4, Te6edf3IconRightWidgetTb4b4b4, Te6edf3OneLineAvatarIconListItem
Tff7b72from T7ee787kivymdT7ee787.T7ee787icon_definitions Tff7b72import Te6edf3md_icons
Tff7b72from T7ee787kivymdT7ee787.T7ee787toast Tff7b72import Te6edf3toast
Tff7b72from T7ee787kivyT7ee787.T7ee787properties Tff7b72import Te6edf3StringPropertyTb4b4b4, Te6edf3BooleanProperty
Tff7b72from T7ee787kivyT7ee787.T7ee787effectsT7ee787.T7ee787scroll Tff7b72import Te6edf3ScrollEffect
Tff7b72from T7ee787kivyT7ee787.T7ee787clock Tff7b72import Te6edf3Clock
Tff7b72from T7ee787sidebandT7ee787.T7ee787sense Tff7b72import Te6edf3Telemeter
Tff7b72import T7ee787threading
Tff7b72from T7ee787datetime Tff7b72import Te6edf3datetime

Tff7b72if Te6edf3RNSTff7b72.Td2a8ffvendorTff7b72.Td2a8ffplatformutilsTff7b72.Td2a8ffget_platformTb4b4b4(Tb4b4b4) Tff7b72== Ta5d6ff"Ta5d6ffandroidTa5d6ff"Tb4b4b4:
Tff7b72from T7ee787uiT7ee787.T7ee787helpers Tff7b72import Te6edf3ts_format_date
Tff7b72from T7ee787androidT7ee787.T7ee787permissions Tff7b72import Te6edf3request_permissionsTb4b4b4, Te6edf3check_permission
Tff7b72elseTb4b4b4:
Tff7b72from T7ee787.T7ee787helpers Tff7b72import Te6edf3ts_format_date

Tff7b72from T7ee787kivyT7ee787.T7ee787utils Tff7b72import Te6edf3escape_markup
Tff7b72if Te6edf3RNSTff7b72.Td2a8ffvendorTff7b72.Td2a8ffplatformutilsTff7b72.Td2a8ffget_platformTb4b4b4(Tb4b4b4) Tff7b72== Ta5d6ff"Ta5d6ffandroidTa5d6ff"Tb4b4b4:
Tff7b72from T7ee787uiT7ee787.T7ee787helpers Tff7b72import Te6edf3multilingual_markupTb4b4b4, Te6edf3mdc
Tff7b72elseTb4b4b4:
Tff7b72from T7ee787.T7ee787helpers Tff7b72import Te6edf3multilingual_markupTb4b4b4, Te6edf3mdc

Tff7b72from T7ee787LXSTT7ee787.T7ee787PrimitivesT7ee787.T7ee787Telephony Tff7b72import Te6edf3TelephoneTb4b4b4, Te6edf3Profiles

Tff7b72class T56d364VoiceTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72def Tff7b72__init__Tb4b4b4(Tff7b72selfTb4b4b4, Te6edf3appTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffapp Tff7b72= Te6edf3app
Tff7b72selfTff7b72.Td2a8ffscreen Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffsettings_screen Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffdial_target Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffui_updater Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffpath_requesting Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffoutput_devices Tff7b72= Tb4b4b4[Tb4b4b4]
Tff7b72selfTff7b72.Td2a8ffinput_devices Tff7b72= Tb4b4b4[Tb4b4b4]
Tff7b72selfTff7b72.Td2a8fflog_list Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8fflast_log_update Tff7b72= T79c0ff0
Tff7b72selfTff7b72.Td2a8fflog_name_cache Tff7b72= Tb4b4b4{Tb4b4b4}
Tff7b72selfTff7b72.Td2a8fflisted_output_devices Tff7b72= Tb4b4b4[Tb4b4b4]
Tff7b72selfTff7b72.Td2a8fflisted_input_devices Tff7b72= Tb4b4b4[Tb4b4b4]
Tff7b72selfTff7b72.Td2a8fflisted_ringer_devices Tff7b72= Tb4b4b4[Tb4b4b4]
Tff7b72selfTff7b72.Td2a8ffcall_profile Tff7b72= Te6edf3ProfilesTff7b72.Td2a8ffDEFAULT_PROFILE
Tff7b72selfTff7b72.Td2a8ffcall_mode Tff7b72= Te6edf3ProfilesTff7b72.Td2a8ffDEFAULT_MODE
Tff7b72if Tff7b72not Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffscreen_managerTff7b72.Td2a8ffhas_screenTb4b4b4(Ta5d6ff"Ta5d6ffvoice_screenTa5d6ff"Tb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffscreen Tff7b72= Te6edf3BuilderTff7b72.Td2a8ffload_stringTb4b4b4(Te6edf3layout_voice_screenTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffscreenTff7b72.Td2a8ffapp Tff7b72= Tff7b72selfTff7b72.Td2a8ffapp
Tff7b72selfTff7b72.Td2a8ffscreenTff7b72.Td2a8ffdelegate Tff7b72= Tff7b72self
Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffscreen_managerTff7b72.Td2a8ffadd_widgetTb4b4b4(Tff7b72selfTff7b72.Td2a8ffscreenTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffupdate_call_logTb4b4b4(Tb4b4b4)

Tff7b72selfTff7b72.Td2a8ffscreenTff7b72.Td2a8ffidsTff7b72.Td2a8fflog_controlsTff7b72.Td2a8ff_target_meta Tff7b72= Ta5d6ff"Ta5d6fflog_controlsTa5d6ff"
Tff7b72selfTff7b72.Td2a8ffscreenTff7b72.Td2a8ffidsTff7b72.Td2a8ffcall_controlsTff7b72.Td2a8ff_target_meta Tff7b72= Ta5d6ff"Ta5d6ffaudio_controlsTa5d6ff"
Tff7b72for Te6edf3w Tff7b72in Tff7b72selfTff7b72.Td2a8ffscreenTff7b72.Td2a8ffidsTff7b72.Td2a8ffmeta_controlsTff7b72.Td2a8ffchildrenTb4b4b4:
Tff7b72if Tffa657hasattrTb4b4b4(Te6edf3wTb4b4b4, Ta5d6ff"Ta5d6ff_target_metaTa5d6ff"Tb4b4b4)Tb4b4b4:
Tff7b72if Te6edf3wTff7b72.Td2a8ff_target_meta Tff7b72== Ta5d6ff"Ta5d6fflog_controlsTa5d6ff"Tb4b4b4: Tff7b72selfTff7b72.Td2a8ff_log_controls Tff7b72= Te6edf3w
Tff7b72elif Te6edf3wTff7b72.Td2a8ff_target_meta Tff7b72== Ta5d6ff"Ta5d6ffaudio_controlsTa5d6ff"Tb4b4b4: Tff7b72selfTff7b72.Td2a8ff_audio_controls Tff7b72= Te6edf3w

Tff7b72selfTff7b72.Td2a8ffscreenTff7b72.Td2a8ffidsTff7b72.Td2a8ffmeta_controlsTff7b72.Td2a8ffremove_widgetTb4b4b4(Tff7b72selfTff7b72.Td2a8ff_audio_controlsTb4b4b4)

Tff7b72def Td2a8ffwidget_hideTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3wTb4b4b4, Te6edf3hideTff7b72=Tff7b72TrueTb4b4b4)Tb4b4b4:
Tff7b72if Tffa657hasattrTb4b4b4(Te6edf3wTb4b4b4, Ta5d6ff"Ta5d6ffsaved_attrsTa5d6ff"Tb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72not Te6edf3hideTb4b4b4:
Te6edf3wTff7b72.Td2a8ffheightTb4b4b4, Te6edf3wTff7b72.Td2a8ffsize_hint_yTb4b4b4, Te6edf3wTff7b72.Td2a8ffopacityTb4b4b4, Te6edf3wTff7b72.Td2a8ffdisabled Tff7b72= Te6edf3wTff7b72.Td2a8ffsaved_attrs
Tff7b72del Te6edf3wTff7b72.Td2a8ffsaved_attrs
Tff7b72elif Te6edf3hideTb4b4b4:
Te6edf3wTff7b72.Td2a8ffsaved_attrs Tff7b72= Te6edf3wTff7b72.Td2a8ffheightTb4b4b4, Te6edf3wTff7b72.Td2a8ffsize_hint_yTb4b4b4, Te6edf3wTff7b72.Td2a8ffopacityTb4b4b4, Te6edf3wTff7b72.Td2a8ffdisabled
Te6edf3wTff7b72.Td2a8ffheightTb4b4b4, Te6edf3wTff7b72.Td2a8ffsize_hint_yTb4b4b4, Te6edf3wTff7b72.Td2a8ffopacityTb4b4b4, Te6edf3wTff7b72.Td2a8ffdisabled Tff7b72= T79c0ff0Tb4b4b4, Tff7b72NoneTb4b4b4, T79c0ff0Tb4b4b4, Tff7b72True
Tff7b72def Td2a8ffupdate_call_statusTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3dtTff7b72=Tff7b72NoneTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffscreen_managerTff7b72.Td2a8ffcurrent Tff7b72== Ta5d6ff"Ta5d6ffvoice_screenTa5d6ff"Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffui_updater Tff7b72== Tff7b72NoneTb4b4b4: Tff7b72selfTff7b72.Td2a8ffui_updater Tff7b72= Te6edf3ClockTff7b72.Td2a8ffschedule_intervalTb4b4b4(Tff7b72selfTff7b72.Td2a8ffupdate_call_statusTb4b4b4, T79c0ff0.5Tb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffui_updaterTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffui_updaterTff7b72.Td2a8ffcancelTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffui_updater Tff7b72= Tff7b72None

Te6edf3db Tff7b72= Tff7b72selfTff7b72.Td2a8ffscreenTff7b72.Td2a8ffidsTff7b72.Td2a8ffdial_button
Te6edf3rb Tff7b72= Tff7b72selfTff7b72.Td2a8ffscreenTff7b72.Td2a8ffidsTff7b72.Td2a8ffreject_button
Te6edf3ih Tff7b72= Tff7b72selfTff7b72.Td2a8ffscreenTff7b72.Td2a8ffidsTff7b72.Td2a8ffidentity_hash
Te6edf3pb Tff7b72= Tff7b72selfTff7b72.Td2a8ffscreenTff7b72.Td2a8ffidsTff7b72.Td2a8ffcall_profile_button
Te6edf3mb Tff7b72= Tff7b72selfTff7b72.Td2a8ffscreenTff7b72.Td2a8ffidsTff7b72.Td2a8ffcall_mode_button
Te6edf3tb Tff7b72= Tff7b72selfTff7b72.Td2a8ffscreenTff7b72.Td2a8ffidsTff7b72.Td2a8ffcall_ptt_button
Te6edf3tc Tff7b72= Tff7b72selfTff7b72.Td2a8ffscreenTff7b72.Td2a8ffidsTff7b72.Td2a8ffcall_ptt_container
Te6edf3rm Tff7b72= Tff7b72selfTff7b72.Td2a8ffscreenTff7b72.Td2a8ffidsTff7b72.Td2a8ffspk_mute_button
Te6edf3tm Tff7b72= Tff7b72selfTff7b72.Td2a8ffscreenTff7b72.Td2a8ffidsTff7b72.Td2a8ffmic_mute_button
Te6edf3ll Tff7b72= Tff7b72selfTff7b72.Td2a8ffscreenTff7b72.Td2a8ffidsTff7b72.Td2a8fflog_list_container
Te6edf3lc Tff7b72= Tff7b72selfTff7b72.Td2a8ffscreenTff7b72.Td2a8ffidsTff7b72.Td2a8fflog_controls
Te6edf3cc Tff7b72= Tff7b72selfTff7b72.Td2a8ffscreenTff7b72.Td2a8ffidsTff7b72.Td2a8ffcall_controls
Te6edf3cs Tff7b72= Tff7b72selfTff7b72.Td2a8ffscreenTff7b72.Td2a8ffidsTff7b72.Td2a8ffcall_stats_container
Te6edf3sl Tff7b72= Tff7b72selfTff7b72.Td2a8ffscreenTff7b72.Td2a8ffidsTff7b72.Td2a8ffcall_stats_label
Tff7b72if Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffvoice_runningTb4b4b4:
Te6edf3telephone Tff7b72= Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8fftelephone
Tff7b72if Tff7b72selfTff7b72.Td2a8ffpath_requestingTb4b4b4:
Te6edf3dbTff7b72.Td2a8ffdisabled Tff7b72= Tff7b72True
Te6edf3rbTff7b72.Td2a8ffdisabled Tff7b72= Tff7b72True
Te6edf3ihTff7b72.Td2a8ffdisabled Tff7b72= Tff7b72True

Tff7b72elseTb4b4b4:
Tff7b72if Te6edf3telephoneTff7b72.Td2a8ffis_availableTb4b4b4:
Te6edf3ihTff7b72.Td2a8ffdisabled Tff7b72= Tff7b72False
Te6edf3rbTff7b72.Td2a8ffdisabled Tff7b72= Tff7b72True
Te6edf3pbTff7b72.Td2a8ffdisabled Tff7b72= Tff7b72False
Te6edf3mbTff7b72.Td2a8ffdisabled Tff7b72= Tff7b72False
Tff7b72selfTff7b72.Td2a8fftarget_input_actionTb4b4b4(Te6edf3ihTb4b4b4)
Tff7b72elseTb4b4b4:
Te6edf3ihTff7b72.Td2a8ffdisabled Tff7b72= Tff7b72True
Te6edf3rbTff7b72.Td2a8ffdisabled Tff7b72= Tff7b72True
Te6edf3pbTff7b72.Td2a8ffdisabled Tff7b72= Tff7b72True
Te6edf3mbTff7b72.Td2a8ffdisabled Tff7b72= Tff7b72True

Tff7b72if Te6edf3telephoneTff7b72.Td2a8ffis_in_call Tff7b72or Te6edf3telephoneTff7b72.Td2a8ffcall_is_connectingTb4b4b4:
Te6edf3ihTff7b72.Td2a8ffdisabled Tff7b72= Tff7b72True
Te6edf3rbTff7b72.Td2a8ffdisabled Tff7b72= Tff7b72True
Te6edf3dbTff7b72.Td2a8ffdisabled Tff7b72= Tff7b72False
Tff7b72if Te6edf3telephoneTff7b72.Td2a8ffcall_is_connectingTb4b4b4: Te6edf3pbTff7b72.Td2a8ffdisabled Tff7b72= Tff7b72True
Tff7b72if Te6edf3telephoneTff7b72.Td2a8ffis_in_callTb4b4b4: Te6edf3pbTff7b72.Td2a8ffdisabled Tff7b72= Tff7b72False
Tff7b72if Te6edf3telephoneTff7b72.Td2a8ffis_in_callTb4b4b4: Te6edf3mbTff7b72.Td2a8ffdisabled Tff7b72= Tff7b72False
Te6edf3dbTff7b72.Td2a8fftext Tff7b72= Ta5d6ff"Ta5d6ffHang upTa5d6ff"
Te6edf3dbTff7b72.Td2a8fficon Tff7b72= Ta5d6ff"Ta5d6ffphone-hangupTa5d6ff"
Tff7b72if Te6edf3telephoneTff7b72.Td2a8ffactive_profileTb4b4b4: Tff7b72selfTff7b72.Td2a8ffcall_profile Tff7b72= Te6edf3telephoneTff7b72.Td2a8ffactive_profile
Tff7b72if Te6edf3telephoneTff7b72.Td2a8ffactive_modeTb4b4b4: Tff7b72selfTff7b72.Td2a8ffcall_mode Tff7b72= Te6edf3telephoneTff7b72.Td2a8ffactive_mode

Tff7b72elif Te6edf3telephoneTff7b72.Td2a8ffis_ringingTb4b4b4:
Te6edf3ihTff7b72.Td2a8ffdisabled Tff7b72= Tff7b72True
Te6edf3rbTff7b72.Td2a8ffdisabled Tff7b72= Tff7b72False
Te6edf3dbTff7b72.Td2a8ffdisabled Tff7b72= Tff7b72False
Te6edf3pbTff7b72.Td2a8ffdisabled Tff7b72= Tff7b72True
Te6edf3mbTff7b72.Td2a8ffdisabled Tff7b72= Tff7b72True
Te6edf3dbTff7b72.Td2a8fftext Tff7b72= Ta5d6ff"Ta5d6ffAnswerTa5d6ff"
Te6edf3dbTff7b72.Td2a8fficon Tff7b72= Ta5d6ff"Ta5d6ffphone-ringTa5d6ff"
Tff7b72if Te6edf3telephoneTff7b72.Td2a8ffcallerTb4b4b4: Te6edf3ihTff7b72.Td2a8fftext Tff7b72= Te6edf3RNSTff7b72.Td2a8ffhexrepTb4b4b4(Te6edf3telephoneTff7b72.Td2a8ffcallerTff7b72.Td2a8ffhashTb4b4b4, Te6edf3delimitTff7b72=Tff7b72FalseTb4b4b4)
Tff7b72if Te6edf3telephoneTff7b72.Td2a8ffactive_profileTb4b4b4: Tff7b72selfTff7b72.Td2a8ffcall_profile Tff7b72= Te6edf3telephoneTff7b72.Td2a8ffactive_profile
Tff7b72if Te6edf3telephoneTff7b72.Td2a8ffactive_modeTb4b4b4: Tff7b72selfTff7b72.Td2a8ffcall_mode Tff7b72= Te6edf3telephoneTff7b72.Td2a8ffactive_mode

Tff7b72if Te6edf3telephoneTff7b72.Td2a8ffis_in_callTb4b4b4:
Te6edf3rmTff7b72.Td2a8ffdisabled Tff7b72= Tff7b72False
Te6edf3tmTff7b72.Td2a8ffdisabled Tff7b72= Tff7b72False
Te6edf3tbTff7b72.Td2a8ffdisabled Tff7b72= Tff7b72False
Tff7b72elseTb4b4b4:
Te6edf3rmTff7b72.Td2a8ffdisabled Tff7b72= Tff7b72True
Te6edf3tmTff7b72.Td2a8ffdisabled Tff7b72= Tff7b72True
Te6edf3tbTff7b72.Td2a8ffdisabled Tff7b72= Tff7b72True

Tff7b72if Te6edf3telephoneTff7b72.Td2a8ffis_in_call Tff7b72or Te6edf3telephoneTff7b72.Td2a8ffcall_is_connecting Tff7b72or Te6edf3telephoneTff7b72.Td2a8ffis_ringingTb4b4b4:
Tff7b72def Td2a8ffcbTb4b4b4(Te6edf3dtTff7b72=Tff7b72NoneTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffwidget_hideTb4b4b4(Te6edf3llTb4b4b4, Tff7b72TrueTb4b4b4)Tb4b4b4; Tff7b72selfTff7b72.Td2a8ffwidget_hideTb4b4b4(Te6edf3csTb4b4b4, Tff7b72FalseTb4b4b4)
Tff7b72if Tff7b72selfTff7b72.Td2a8ffcall_mode Tff7b72== Te6edf3ProfilesTff7b72.Td2a8ffMODE_HALF_DUPLEXTb4b4b4: Tff7b72selfTff7b72.Td2a8ffwidget_hideTb4b4b4(Te6edf3tcTb4b4b4, Tff7b72FalseTb4b4b4)
Tff7b72elseTb4b4b4: Tff7b72selfTff7b72.Td2a8ffwidget_hideTb4b4b4(Te6edf3tcTb4b4b4, Tff7b72TrueTb4b4b4)
Tff7b72if Tff7b72selfTff7b72.Td2a8ff_log_controls Tff7b72in Tff7b72selfTff7b72.Td2a8ffscreenTff7b72.Td2a8ffidsTff7b72.Td2a8ffmeta_controlsTff7b72.Td2a8ffchildrenTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffscreenTff7b72.Td2a8ffidsTff7b72.Td2a8ffmeta_controlsTff7b72.Td2a8ffremove_widgetTb4b4b4(Tff7b72selfTff7b72.Td2a8ff_log_controlsTb4b4b4)
Tff7b72if Tff7b72not Tff7b72selfTff7b72.Td2a8ff_audio_controls Tff7b72in Tff7b72selfTff7b72.Td2a8ffscreenTff7b72.Td2a8ffidsTff7b72.Td2a8ffmeta_controlsTff7b72.Td2a8ffchildrenTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffscreenTff7b72.Td2a8ffidsTff7b72.Td2a8ffmeta_controlsTff7b72.Td2a8ffadd_widgetTb4b4b4(Tff7b72selfTff7b72.Td2a8ff_audio_controlsTb4b4b4)
Te6edf3ClockTff7b72.Td2a8ffschedule_onceTb4b4b4(Te6edf3cbTb4b4b4, T79c0ff0.1Tb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72def Td2a8ffcbTb4b4b4(Te6edf3dtTff7b72=Tff7b72NoneTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffwidget_hideTb4b4b4(Te6edf3llTb4b4b4, Tff7b72FalseTb4b4b4)Tb4b4b4; Tff7b72selfTff7b72.Td2a8ffwidget_hideTb4b4b4(Te6edf3csTb4b4b4, Tff7b72TrueTb4b4b4)
Tff7b72if Tff7b72selfTff7b72.Td2a8ff_audio_controls Tff7b72in Tff7b72selfTff7b72.Td2a8ffscreenTff7b72.Td2a8ffidsTff7b72.Td2a8ffmeta_controlsTff7b72.Td2a8ffchildrenTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffscreenTff7b72.Td2a8ffidsTff7b72.Td2a8ffmeta_controlsTff7b72.Td2a8ffremove_widgetTb4b4b4(Tff7b72selfTff7b72.Td2a8ff_audio_controlsTb4b4b4)
Tff7b72if Tff7b72not Tff7b72selfTff7b72.Td2a8ff_log_controls Tff7b72in Tff7b72selfTff7b72.Td2a8ffscreenTff7b72.Td2a8ffidsTff7b72.Td2a8ffmeta_controlsTff7b72.Td2a8ffchildrenTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffscreenTff7b72.Td2a8ffidsTff7b72.Td2a8ffmeta_controlsTff7b72.Td2a8ffadd_widgetTb4b4b4(Tff7b72selfTff7b72.Td2a8ff_log_controlsTb4b4b4)
Te6edf3ClockTff7b72.Td2a8ffschedule_onceTb4b4b4(Te6edf3cbTb4b4b4, T79c0ff0.1Tb4b4b4)

Tff7b72if Te6edf3telephoneTff7b72.Td2a8ffreceive_mutedTb4b4b4:
Te6edf3rmTff7b72.Td2a8fftext Tff7b72= Ta5d6ff"Ta5d6ffOutput MutedTa5d6ff"
Te6edf3rmTff7b72.Td2a8fficon Tff7b72= Ta5d6ff"Ta5d6ffvolume-offTa5d6ff"
Tff7b72elseTb4b4b4:
Te6edf3rmTff7b72.Td2a8fftext Tff7b72= Ta5d6ff"Ta5d6ffOutput ActiveTa5d6ff"
Te6edf3rmTff7b72.Td2a8fficon Tff7b72= Ta5d6ff"Ta5d6ffvolume-highTa5d6ff"

Tff7b72if Te6edf3telephoneTff7b72.Td2a8fftransmit_mutedTb4b4b4:
Te6edf3tmTff7b72.Td2a8fftext Tff7b72= Ta5d6ff"Ta5d6ffMic MutedTa5d6ff"
Te6edf3tmTff7b72.Td2a8fficon Tff7b72= Ta5d6ff"Ta5d6ffmicrophone-offTa5d6ff"
Tff7b72elseTb4b4b4:
Te6edf3tmTff7b72.Td2a8fftext Tff7b72= Ta5d6ff"Ta5d6ffMic ActiveTa5d6ff"
Te6edf3tmTff7b72.Td2a8fficon Tff7b72= Ta5d6ff"Ta5d6ffmicrophoneTa5d6ff"

Tff7b72if Te6edf3telephoneTff7b72.Td2a8ffis_in_call Tff7b72or Te6edf3telephoneTff7b72.Td2a8ffcall_is_connecting Tff7b72or Te6edf3telephoneTff7b72.Td2a8ffis_ringingTb4b4b4:
Te6edf3stats Tff7b72= Te6edf3telephoneTff7b72.Td2a8ffcall_stats
Te6edf3t_str Tff7b72= Te6edf3RNSTff7b72.Td2a8ffprettytimeTb4b4b4(Tffa657intTb4b4b4(Te6edf3statsTb4b4b4[Ta5d6ff"Ta5d6fftimeTa5d6ff"Tb4b4b4]Tb4b4b4)Tb4b4b4) Tff7b72if Te6edf3statsTb4b4b4[Ta5d6ff"Ta5d6fftimeTa5d6ff"Tb4b4b4] Tff7b72else Tff7b72None
Te6edf3rxb Tff7b72= Te6edf3statsTb4b4b4[Ta5d6ff"Ta5d6ffrxbTa5d6ff"Tb4b4b4]
Te6edf3txb Tff7b72= Te6edf3statsTb4b4b4[Ta5d6ff"Ta5d6fftxbTa5d6ff"Tb4b4b4]

Tff7b72if Te6edf3telephoneTff7b72.Td2a8ffis_ringingTb4b4b4:
Te6edf3disp_name Tff7b72= Te6edf3peer_disp_name Tff7b72= Te6edf3multilingual_markupTb4b4b4(Te6edf3escape_markupTb4b4b4(Tffa657strTb4b4b4(Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffvoice_display_nameTb4b4b4(Te6edf3telephoneTff7b72.Td2a8ffcallerTff7b72.Td2a8ffhashTb4b4b4)Tb4b4b4)Tb4b4b4)Tff7b72.Td2a8ffencodeTb4b4b4(Ta5d6ff"Ta5d6ffutf-8Ta5d6ff"Tb4b4b4)Tb4b4b4)Tff7b72.Td2a8ffdecodeTb4b4b4(Ta5d6ff"Ta5d6ffutf-8Ta5d6ff"Tb4b4b4)
Te6edf3r_str Tff7b72= Ta5d6fffTa5d6ff"Ta5d6ffCall from Tffd700{Te6edf3disp_nameTffd700}Ta5d6ff"
Tff7b72elseTb4b4b4:
Te6edf3disp_name Tff7b72= Te6edf3peer_disp_name Tff7b72= Te6edf3multilingual_markupTb4b4b4(Te6edf3escape_markupTb4b4b4(Tffa657strTb4b4b4(Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffvoice_display_nameTb4b4b4(Tff7b72selfTff7b72.Td2a8ffdial_targetTb4b4b4)Tb4b4b4)Tb4b4b4)Tff7b72.Td2a8ffencodeTb4b4b4(Ta5d6ff"Ta5d6ffutf-8Ta5d6ff"Tb4b4b4)Tb4b4b4)Tff7b72.Td2a8ffdecodeTb4b4b4(Ta5d6ff"Ta5d6ffutf-8Ta5d6ff"Tb4b4b4)
Te6edf3r_str Tff7b72= Ta5d6fffTa5d6ff"Ta5d6ffCall with Tffd700{Te6edf3disp_nameTffd700}Ta5d6ff"

Te6edf3s_str Tff7b72= Ta5d6fffTa5d6ff"Ta5d6ff"
Tff7b72if Te6edf3t_strTb4b4b4: Te6edf3s_str Tff7b72+Tff7b72= Ta5d6fffTa5d6ff"Tffea00\nTa5d6ffConnected for Tffd700{Te6edf3t_strTffd700}Tffea00\nTa5d6ff"
Tff7b72elseTb4b4b4: Te6edf3s_str Tff7b72+Tff7b72= Ta5d6fffTa5d6ff"Tffea00\nTa5d6ffConnecting call...Tffea00\nTa5d6ff" Tff7b72if Tff7b72not Te6edf3telephoneTff7b72.Td2a8ffis_ringing Tff7b72else Ta5d6ff"Ta5d6ff"

Te6edf3h_str Tff7b72= Ta5d6fffTa5d6ff"Tffd700{Te6edf3statsTb4b4b4[Ta5d6ff'Ta5d6ffhopsTa5d6ff'Tb4b4b4]Tffd700}Ta5d6ff hopTffd700{Ta5d6ff'Ta5d6ff' Tff7b72if Te6edf3statsTb4b4b4[Ta5d6ff'Ta5d6ffhopsTa5d6ff'Tb4b4b4] Tff7b72== T79c0ff1 Tff7b72else Ta5d6ff'Ta5d6ffsTa5d6ff'Tffd700}Ta5d6ff" Tff7b72if Te6edf3statsTb4b4b4[Ta5d6ff"Ta5d6ffhopsTa5d6ff"Tb4b4b4] Tff7b72else Ta5d6ff"Ta5d6ff" Tff7b72if Te6edf3statsTb4b4b4[Ta5d6ff"Ta5d6ffhopsTa5d6ff"Tb4b4b4] Tff7b72else Ta5d6ff"Ta5d6ffUnknownTa5d6ff"
Te6edf3s_str Tff7b72+Tff7b72= Ta5d6fffTa5d6ff"Tffea00\nTa5d6ffDistance : Tffd700{Te6edf3h_strTffd700}Ta5d6ff"
Te6edf3s_str Tff7b72+Tff7b72= Ta5d6fffTa5d6ff"Tffea00\nTa5d6ffMode : Tffd700{Te6edf3ProfilesTff7b72.Td2a8ffmode_nameTb4b4b4(Te6edf3statsTb4b4b4[Ta5d6ff'Ta5d6ffmodeTa5d6ff'Tb4b4b4]Tb4b4b4) Tff7b72if Te6edf3statsTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff'Ta5d6ffmodeTa5d6ff'Tb4b4b4, Tff7b72NoneTb4b4b4) Tff7b72else Ta5d6ff'Ta5d6ffUnknownTa5d6ff'Tffd700}Ta5d6ff"
Te6edf3s_str Tff7b72+Tff7b72= Ta5d6fffTa5d6ff"Tffea00\nTa5d6ffProfile : Tffd700{Te6edf3ProfilesTff7b72.Td2a8ffprofile_nameTb4b4b4(Te6edf3statsTb4b4b4[Ta5d6ff'Ta5d6ffprofileTa5d6ff'Tb4b4b4]Tb4b4b4) Tff7b72if Te6edf3statsTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff'Ta5d6ffprofileTa5d6ff'Tb4b4b4, Tff7b72NoneTb4b4b4) Tff7b72else Ta5d6ff'Ta5d6ffUnknownTa5d6ff'Tffd700}Ta5d6ff"
T8b949e# s_str += f"\nRX Codec : {stats['rxcodec']}"
Te6edf3s_str Tff7b72+Tff7b72= Ta5d6fffTa5d6ff"Tffea00\nTa5d6ffCodec : Tffd700{Te6edf3statsTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff'Ta5d6fftxcodecTa5d6ff'Tb4b4b4, Ta5d6ff'Ta5d6ffUnknownTa5d6ff'Tb4b4b4)Tffd700}Ta5d6ff"
Te6edf3s_str Tff7b72+Tff7b72= Ta5d6fffTa5d6ff"Tffea00\nTa5d6ffTraffic : TX Tffd700{Te6edf3RNSTff7b72.Td2a8ffprettysizeTb4b4b4(Te6edf3txbTb4b4b4)Tffd700}Ta5d6ff"
Te6edf3s_str Tff7b72+Tff7b72= Ta5d6fffTa5d6ff"Tffea00\nTa5d6ff RX Tffd700{Te6edf3RNSTff7b72.Td2a8ffprettysizeTb4b4b4(Te6edf3rxbTb4b4b4)Tffd700}Ta5d6ff"

Te6edf3slTff7b72.Td2a8fftext Tff7b72= Ta5d6fffTa5d6ff"Ta5d6ff[b]Tffd700{Te6edf3r_strTffd700}Ta5d6ff[/b]Tffea00\nTa5d6ff[font=RobotoMono-Regular][size=Tffd700{Tffa657intTb4b4b4(Te6edf3dpTb4b4b4(T79c0ff14Tb4b4b4)Tb4b4b4)Tffd700}Ta5d6ff]Tffd700{Te6edf3s_strTffd700}Ta5d6ff[/size][/font]Ta5d6ff"

Tff7b72if Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffgetstateTb4b4b4(Ta5d6ff"Ta5d6ffvoice.connection_failureTa5d6ff"Tb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffsetstateTb4b4b4(Ta5d6ff"Ta5d6ffvoice.connection_failureTa5d6ff"Tb4b4b4, Tff7b72FalseTb4b4b4)
Te6edf3toastTb4b4b4(Ta5d6ff"Ta5d6ffCould not connect callTa5d6ff"Tb4b4b4, Te6edf3durationTff7b72=T79c0ff5Tb4b4b4)

Tff7b72elseTb4b4b4:
Te6edf3dbTff7b72.Td2a8ffdisabled Tff7b72= Tff7b72TrueTb4b4b4; Te6edf3dbTff7b72.Td2a8fftext Tff7b72= Ta5d6ff"Ta5d6ffVoice calls disabledTa5d6ff"
Te6edf3ihTff7b72.Td2a8ffdisabled Tff7b72= Tff7b72True
Te6edf3rbTff7b72.Td2a8ffdisabled Tff7b72= Tff7b72True
Te6edf3pbTff7b72.Td2a8ffdisabled Tff7b72= Tff7b72True
Te6edf3mbTff7b72.Td2a8ffdisabled Tff7b72= Tff7b72True

Te6edf3pbTff7b72.Td2a8fftext Tff7b72= Te6edf3ProfilesTff7b72.Td2a8ffprofile_abbrevationTb4b4b4(Tff7b72selfTff7b72.Td2a8ffcall_profileTb4b4b4)
Te6edf3mbTff7b72.Td2a8fftext Tff7b72= Te6edf3ProfilesTff7b72.Td2a8ffmode_abbrevationTb4b4b4(Tff7b72selfTff7b72.Td2a8ffcall_modeTb4b4b4)
Tff7b72if Tff7b72selfTff7b72.Td2a8ffcall_mode Tff7b72== Te6edf3ProfilesTff7b72.Td2a8ffMODE_FULL_DUPLEXTb4b4b4: Te6edf3mbTff7b72.Td2a8fficon Tff7b72= Ta5d6ff"Ta5d6ffphone-incoming-outgoingTa5d6ff"
Tff7b72elseTb4b4b4: Te6edf3mbTff7b72.Td2a8fficon Tff7b72= Ta5d6ff"Ta5d6ffradio-handheldTa5d6ff"

Tff7b72if Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4) Tff7b72> Tff7b72selfTff7b72.Td2a8fflast_log_updateTff7b72+T79c0ff3Tb4b4b4: Tff7b72selfTff7b72.Td2a8ffupdate_call_logTb4b4b4(Tb4b4b4)

Tff7b72def Td2a8ffptt_down_actionTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3senderTff7b72=Tff7b72NoneTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8fftelephoneTff7b72.Td2a8ffis_in_call Tff7b72and Tff7b72selfTff7b72.Td2a8ffcall_mode Tff7b72== Te6edf3ProfilesTff7b72.Td2a8ffMODE_HALF_DUPLEXTb4b4b4:
Te6edf3ptt_button Tff7b72= Tff7b72selfTff7b72.Td2a8ffscreenTff7b72.Td2a8ffidsTff7b72.Td2a8ffcall_ptt_button
Te6edf3ptt_icon Tff7b72= Tff7b72selfTff7b72.Td2a8ffscreenTff7b72.Td2a8ffidsTff7b72.Td2a8ffcall_ptt_buttonTff7b72.Td2a8ffchildrenTb4b4b4[T79c0ff0Tb4b4b4]Tff7b72.Td2a8ffchildrenTb4b4b4[T79c0ff1Tb4b4b4]
Te6edf3ptt_buttonTff7b72.Td2a8fftheme_text_colorTff7b72=Ta5d6ff"Ta5d6ffCustomTa5d6ff"
Te6edf3ptt_buttonTff7b72.Td2a8fftext_colorTff7b72=Te6edf3mdcTb4b4b4(Ta5d6ff"Ta5d6ffOrangeTa5d6ff"Tb4b4b4,Ta5d6ff"Ta5d6ff400Ta5d6ff"Tb4b4b4)
Te6edf3ptt_buttonTff7b72.Td2a8ffline_colorTff7b72=Te6edf3mdcTb4b4b4(Ta5d6ff"Ta5d6ffOrangeTa5d6ff"Tb4b4b4,Ta5d6ff"Ta5d6ff400Ta5d6ff"Tb4b4b4)
Te6edf3ptt_iconTff7b72.Td2a8fftheme_text_colorTff7b72=Ta5d6ff"Ta5d6ffCustomTa5d6ff"
Te6edf3ptt_iconTff7b72.Td2a8fftext_colorTff7b72=Te6edf3mdcTb4b4b4(Ta5d6ff"Ta5d6ffOrangeTa5d6ff"Tb4b4b4,Ta5d6ff"Ta5d6ff400Ta5d6ff"Tb4b4b4)

Tff7b72def Td2a8ffjobTb4b4b4(Tb4b4b4)Tb4b4b4: Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8fftelephoneTff7b72.Td2a8ffsquelch_transmitTb4b4b4(Tff7b72FalseTb4b4b4)
Te6edf3threadingTff7b72.Td2a8ffThreadTb4b4b4(Te6edf3targetTff7b72=Te6edf3jobTb4b4b4, Te6edf3daemonTff7b72=Tff7b72TrueTb4b4b4)Tff7b72.Td2a8ffstartTb4b4b4(Tb4b4b4)

Tff7b72def Td2a8ffptt_up_actionTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3senderTff7b72=Tff7b72NoneTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8fftelephoneTff7b72.Td2a8ffis_in_call Tff7b72and Tff7b72selfTff7b72.Td2a8ffcall_mode Tff7b72== Te6edf3ProfilesTff7b72.Td2a8ffMODE_HALF_DUPLEXTb4b4b4:
Te6edf3ptt_button Tff7b72= Tff7b72selfTff7b72.Td2a8ffscreenTff7b72.Td2a8ffidsTff7b72.Td2a8ffcall_ptt_button
Te6edf3ptt_icon Tff7b72= Tff7b72selfTff7b72.Td2a8ffscreenTff7b72.Td2a8ffidsTff7b72.Td2a8ffcall_ptt_buttonTff7b72.Td2a8ffchildrenTb4b4b4[T79c0ff0Tb4b4b4]Tff7b72.Td2a8ffchildrenTb4b4b4[T79c0ff1Tb4b4b4]
Te6edf3ptt_buttonTff7b72.Td2a8fftheme_text_colorTff7b72=Ta5d6ff"Ta5d6ffCustomTa5d6ff"
Te6edf3ptt_buttonTff7b72.Td2a8fftext_colorTff7b72=Te6edf3mdcTb4b4b4(Ta5d6ff"Ta5d6ffBlueGrayTa5d6ff"Tb4b4b4,Ta5d6ff"Ta5d6ff500Ta5d6ff"Tb4b4b4)
Te6edf3ptt_buttonTff7b72.Td2a8ffline_colorTff7b72=Te6edf3mdcTb4b4b4(Ta5d6ff"Ta5d6ffBlueGrayTa5d6ff"Tb4b4b4,Ta5d6ff"Ta5d6ff500Ta5d6ff"Tb4b4b4)
Te6edf3ptt_iconTff7b72.Td2a8fftheme_text_colorTff7b72=Ta5d6ff"Ta5d6ffCustomTa5d6ff"
Te6edf3ptt_iconTff7b72.Td2a8fftext_colorTff7b72=Te6edf3mdcTb4b4b4(Ta5d6ff"Ta5d6ffBlueGrayTa5d6ff"Tb4b4b4,Ta5d6ff"Ta5d6ff500Ta5d6ff"Tb4b4b4)
Tff7b72def Td2a8ffjobTb4b4b4(Tb4b4b4)Tb4b4b4: Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8fftelephoneTff7b72.Td2a8ffsquelch_transmitTb4b4b4(Tff7b72TrueTb4b4b4)
Te6edf3threadingTff7b72.Td2a8ffThreadTb4b4b4(Te6edf3targetTff7b72=Te6edf3jobTb4b4b4, Te6edf3daemonTff7b72=Tff7b72TrueTb4b4b4)Tff7b72.Td2a8ffstartTb4b4b4(Tb4b4b4)

Tff7b72def Td2a8fftarget_validTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffvoice_runningTb4b4b4:
Te6edf3db Tff7b72= Tff7b72selfTff7b72.Td2a8ffscreenTff7b72.Td2a8ffidsTff7b72.Td2a8ffdial_button
Te6edf3dbTff7b72.Td2a8ffdisabled Tff7b72= Tff7b72FalseTb4b4b4; Te6edf3dbTff7b72.Td2a8fftext Tff7b72= Ta5d6ff"Ta5d6ffCallTa5d6ff"
Te6edf3dbTff7b72.Td2a8fficon Tff7b72= Ta5d6ff"Ta5d6ffphone-outgoingTa5d6ff"

Tff7b72def Td2a8fftarget_invalidTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffvoice_runningTb4b4b4:
Te6edf3db Tff7b72= Tff7b72selfTff7b72.Td2a8ffscreenTff7b72.Td2a8ffidsTff7b72.Td2a8ffdial_button
Te6edf3dbTff7b72.Td2a8ffdisabled Tff7b72= Tff7b72TrueTb4b4b4; Te6edf3dbTff7b72.Td2a8fftext Tff7b72= Ta5d6ff"Ta5d6ffCallTa5d6ff"
Te6edf3dbTff7b72.Td2a8fficon Tff7b72= Ta5d6ff"Ta5d6ffphone-outgoingTa5d6ff"

Tff7b72def Td2a8fftarget_input_actionTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3senderTb4b4b4)Tb4b4b4:
Tff7b72if Te6edf3senderTb4b4b4:
Te6edf3target_hash Tff7b72= Te6edf3senderTff7b72.Td2a8fftext
Tff7b72if Tffa657lenTb4b4b4(Te6edf3target_hashTb4b4b4) Tff7b72== Te6edf3RNSTff7b72.Td2a8ffReticulumTff7b72.Td2a8ffTRUNCATED_HASHLENGTHTff7b72/Tff7b72/T79c0ff8Tff7b72*T79c0ff2Tb4b4b4:
Tff7b72tryTb4b4b4:
Te6edf3identity_hash Tff7b72= Tffa657bytesTff7b72.Td2a8fffromhexTb4b4b4(Te6edf3target_hashTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffdial_target Tff7b72= Te6edf3identity_hash
Tff7b72selfTff7b72.Td2a8fftarget_validTb4b4b4(Tb4b4b4)

Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4: Tff7b72selfTff7b72.Td2a8fftarget_invalidTb4b4b4(Tb4b4b4)
Tff7b72elseTb4b4b4: Tff7b72selfTff7b72.Td2a8fftarget_invalidTb4b4b4(Tb4b4b4)

Tff7b72def Td2a8ffrequest_pathTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3destination_hashTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72not Tff7b72selfTff7b72.Td2a8ffpath_requestingTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8fftelephoneTff7b72.Td2a8ffset_busyTb4b4b4(Tff7b72TrueTb4b4b4)
Te6edf3toastTb4b4b4(Ta5d6ff"Ta5d6ffRequesting path...Ta5d6ff"Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffscreenTff7b72.Td2a8ffidsTff7b72.Td2a8ffdial_buttonTff7b72.Td2a8ffdisabled Tff7b72= Tff7b72True
Tff7b72selfTff7b72.Td2a8ffpath_requesting Tff7b72= Te6edf3destination_hash
Te6edf3RNSTff7b72.Td2a8ffTransportTff7b72.Td2a8ffrequest_pathTb4b4b4(Te6edf3destination_hashTb4b4b4)
Te6edf3threadingTff7b72.Td2a8ffThreadTb4b4b4(Te6edf3targetTff7b72=Tff7b72selfTff7b72.Td2a8ff_path_wait_jobTb4b4b4, Te6edf3daemonTff7b72=Tff7b72TrueTb4b4b4)Tff7b72.Td2a8ffstartTb4b4b4(Tb4b4b4)
Tff7b72elseTb4b4b4:
Te6edf3toastTb4b4b4(Ta5d6ff"Ta5d6ffWaiting for path request answer...Ta5d6ff"Tb4b4b4)

Tff7b72def Td2a8ff_path_wait_jobTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Te6edf3timeout Tff7b72= Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4)Tff7b72+Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8fftelephoneTff7b72.Td2a8ffPATH_TIME
Tff7b72while Tff7b72not Te6edf3RNSTff7b72.Td2a8ffTransportTff7b72.Td2a8ffhas_pathTb4b4b4(Tff7b72selfTff7b72.Td2a8ffpath_requestingTb4b4b4) Tff7b72and Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4) Tff7b72< Te6edf3timeoutTb4b4b4:
Te6edf3timeTff7b72.Td2a8ffsleepTb4b4b4(T79c0ff0.25Tb4b4b4)

Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8fftelephoneTff7b72.Td2a8ffset_busyTb4b4b4(Tff7b72FalseTb4b4b4)
Tff7b72if Te6edf3RNSTff7b72.Td2a8ffTransportTff7b72.Td2a8ffhas_pathTb4b4b4(Tff7b72selfTff7b72.Td2a8ffpath_requestingTb4b4b4)Tb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffCalling Tffd700{Te6edf3RNSTff7b72.Td2a8ffprettyhexrepTb4b4b4(Tff7b72selfTff7b72.Td2a8ffdial_targetTb4b4b4)Tffd700}Ta5d6ff...Ta5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8fftelephoneTff7b72.Td2a8ffdialTb4b4b4(Tff7b72selfTff7b72.Td2a8ffdial_targetTb4b4b4, Te6edf3profileTff7b72=Tff7b72selfTff7b72.Td2a8ffcall_profileTb4b4b4, Te6edf3modeTff7b72=Tff7b72selfTff7b72.Td2a8ffcall_modeTb4b4b4)
Te6edf3ClockTff7b72.Td2a8ffschedule_onceTb4b4b4(Tff7b72selfTff7b72.Td2a8ffupdate_call_statusTb4b4b4, T79c0ff0.1Tb4b4b4)

Tff7b72elseTb4b4b4:
Te6edf3ClockTff7b72.Td2a8ffschedule_onceTb4b4b4(Tff7b72selfTff7b72.Td2a8ff_path_request_failedTb4b4b4, T79c0ff0.05Tb4b4b4)
Te6edf3ClockTff7b72.Td2a8ffschedule_onceTb4b4b4(Tff7b72selfTff7b72.Td2a8ffupdate_call_statusTb4b4b4, T79c0ff0.1Tb4b4b4)

Tff7b72selfTff7b72.Td2a8ffpath_requesting Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffupdate_call_statusTb4b4b4(Tb4b4b4)

Tff7b72def Td2a8ff_path_request_failedTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3dtTb4b4b4)Tb4b4b4:
Te6edf3toastTb4b4b4(Ta5d6ff"Ta5d6ffPath request timed outTa5d6ff"Tb4b4b4)

Tff7b72def Td2a8ffcall_profile_actionTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3senderTff7b72=Tff7b72NoneTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8fftelephoneTff7b72.Td2a8ffis_in_callTb4b4b4: Tff7b72selfTff7b72.Td2a8ffswitch_profile_actionTb4b4b4(Tb4b4b4)
Tff7b72elseTb4b4b4:
Te6edf3pb Tff7b72= Tff7b72selfTff7b72.Td2a8ffscreenTff7b72.Td2a8ffidsTff7b72.Td2a8ffcall_profile_button
Tff7b72selfTff7b72.Td2a8ffcall_profile Tff7b72= Te6edf3ProfilesTff7b72.Td2a8ffnext_profileTb4b4b4(Tff7b72selfTff7b72.Td2a8ffcall_profileTb4b4b4)
Te6edf3pbTff7b72.Td2a8fftext Tff7b72= Te6edf3ProfilesTff7b72.Td2a8ffprofile_abbrevationTb4b4b4(Tff7b72selfTff7b72.Td2a8ffcall_profileTb4b4b4)
Te6edf3toastTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffCall Profile: Tffd700{Te6edf3ProfilesTff7b72.Td2a8ffprofile_nameTb4b4b4(Tff7b72selfTff7b72.Td2a8ffcall_profileTb4b4b4)Tffd700}Ta5d6ff"Tb4b4b4)

Tff7b72def Td2a8ffcall_mode_actionTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3senderTff7b72=Tff7b72NoneTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8fftelephoneTff7b72.Td2a8ffis_in_callTb4b4b4: Tff7b72selfTff7b72.Td2a8ffswitch_mode_actionTb4b4b4(Tb4b4b4)
Tff7b72elseTb4b4b4:
Te6edf3mb Tff7b72= Tff7b72selfTff7b72.Td2a8ffscreenTff7b72.Td2a8ffidsTff7b72.Td2a8ffcall_mode_button
Tff7b72if Tff7b72selfTff7b72.Td2a8ffcall_mode Tff7b72== Te6edf3ProfilesTff7b72.Td2a8ffMODE_FULL_DUPLEXTb4b4b4: Tff7b72selfTff7b72.Td2a8ffcall_mode Tff7b72= Te6edf3ProfilesTff7b72.Td2a8ffMODE_HALF_DUPLEX
Tff7b72elseTb4b4b4: Tff7b72selfTff7b72.Td2a8ffcall_mode Tff7b72= Te6edf3ProfilesTff7b72.Td2a8ffMODE_FULL_DUPLEX
Te6edf3mbTff7b72.Td2a8fftext Tff7b72= Te6edf3ProfilesTff7b72.Td2a8ffmode_abbrevationTb4b4b4(Tff7b72selfTff7b72.Td2a8ffcall_modeTb4b4b4)
Tff7b72if Tff7b72selfTff7b72.Td2a8ffcall_mode Tff7b72== Te6edf3ProfilesTff7b72.Td2a8ffMODE_FULL_DUPLEXTb4b4b4: Te6edf3mbTff7b72.Td2a8fficon Tff7b72= Ta5d6ff"Ta5d6ffphone-incoming-outgoingTa5d6ff"
Tff7b72elseTb4b4b4: Te6edf3mbTff7b72.Td2a8fficon Tff7b72= Ta5d6ff"Ta5d6ffradio-handheldTa5d6ff"
Te6edf3toastTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffCall Mode: Tffd700{Te6edf3ProfilesTff7b72.Td2a8ffmode_nameTb4b4b4(Tff7b72selfTff7b72.Td2a8ffcall_modeTb4b4b4)Tffd700}Ta5d6ff"Tb4b4b4)

Tff7b72def Td2a8ffswitch_profile_actionTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3senderTff7b72=Tff7b72NoneTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffinitial_call_profile Tff7b72== Tff7b72NoneTb4b4b4: Tff7b72selfTff7b72.Td2a8ffinitial_call_profile Tff7b72= Tff7b72selfTff7b72.Td2a8ffcall_profile
Tff7b72if Tff7b72selfTff7b72.Td2a8ffinitial_call_profile Tff7b72< Te6edf3ProfilesTff7b72.Td2a8ffQUALITY_MEDIUMTb4b4b4: Te6edf3alt_profile Tff7b72= Te6edf3ProfilesTff7b72.Td2a8ffQUALITY_MEDIUM
Tff7b72elseTb4b4b4: Te6edf3alt_profile Tff7b72= Te6edf3ProfilesTff7b72.Td2a8ffBANDWIDTH_LOW
Te6edf3switch_profiles Tff7b72= Tb4b4b4[Te6edf3alt_profileTb4b4b4, Tff7b72selfTff7b72.Td2a8ffinitial_call_profileTb4b4b4]
Tff7b72if Tff7b72selfTff7b72.Td2a8ffcall_profile Tff7b72== Te6edf3switch_profilesTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffSwitching to Tffd700{Te6edf3ProfilesTff7b72.Td2a8ffprofile_nameTb4b4b4(Te6edf3switch_profilesTb4b4b4[T79c0ff1Tb4b4b4]Tb4b4b4)Tffd700}Ta5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8fftelephoneTff7b72.Td2a8ffswitch_profileTb4b4b4(Te6edf3switch_profilesTb4b4b4[T79c0ff1Tb4b4b4]Tb4b4b4)
Tff7b72elseTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffSwitching to Tffd700{Te6edf3ProfilesTff7b72.Td2a8ffprofile_nameTb4b4b4(Te6edf3switch_profilesTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4)Tffd700}Ta5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8fftelephoneTff7b72.Td2a8ffswitch_profileTb4b4b4(Te6edf3switch_profilesTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4)

Tff7b72def Td2a8ffswitch_mode_actionTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3senderTff7b72=Tff7b72NoneTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffcall_mode Tff7b72== Te6edf3ProfilesTff7b72.Td2a8ffMODE_FULL_DUPLEXTb4b4b4: Te6edf3mode Tff7b72= Te6edf3ProfilesTff7b72.Td2a8ffMODE_HALF_DUPLEX
Tff7b72elseTb4b4b4: Te6edf3mode Tff7b72= Te6edf3ProfilesTff7b72.Td2a8ffMODE_FULL_DUPLEX
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffSwitching to Tffd700{Te6edf3ProfilesTff7b72.Td2a8ffmode_nameTb4b4b4(Te6edf3modeTb4b4b4)Tffd700}Ta5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8fftelephoneTff7b72.Td2a8ffswitch_modeTb4b4b4(Te6edf3modeTb4b4b4)

Tff7b72def Td2a8ffclear_log_actionTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3senderTff7b72=Tff7b72NoneTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8fftelephoneTff7b72.Td2a8ffclear_call_logTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffupdate_call_logTb4b4b4(Tb4b4b4)

Tff7b72def Td2a8fflog_dial_actionTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3senderTff7b72=Tff7b72NoneTb4b4b4)Tb4b4b4:
Tff7b72def Td2a8ffjobTb4b4b4(Te6edf3dtTff7b72=Tff7b72NoneTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72not Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffscreen_managerTff7b72.Td2a8ffcurrent Tff7b72== Ta5d6ff"Ta5d6ffvoice_screenTa5d6ff"Tb4b4b4: Tff7b72return
Tff7b72if Te6edf3sender Tff7b72and Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffvoice_running Tff7b72and Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8fftelephone Tff7b72!= Tff7b72NoneTb4b4b4:
Te6edf3telephone Tff7b72= Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8fftelephone
Tff7b72if Tff7b72not Te6edf3telephoneTff7b72.Td2a8ffis_ringing Tff7b72and Tff7b72not Te6edf3telephoneTff7b72.Td2a8ffis_in_call Tff7b72and Tff7b72not Te6edf3telephoneTff7b72.Td2a8ffcall_is_connectingTb4b4b4:
Te6edf3call_dialog_text Tff7b72= Ta5d6fffTa5d6ff"Ta5d6ff[b]Initiate Voice Call?[/b]Tffea00\nTffea00\nTa5d6ffDestination Identity:Tffea00\nTffd700{Te6edf3RNSTff7b72.Td2a8ffprettyhexrepTb4b4b4(Te6edf3senderTff7b72.Td2a8ffidentityTb4b4b4)Tffd700}Ta5d6ff"
Tff7b72if Tffa657hasattrTb4b4b4(Tff7b72selfTff7b72.Td2a8ffappTb4b4b4, Ta5d6ff"Ta5d6ffconfirm_call_dialogTa5d6ff"Tb4b4b4)Tb4b4b4: Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffconfirm_call_dialogTff7b72.Td2a8fftext Tff7b72= Te6edf3call_dialog_text
Tff7b72elseTb4b4b4: Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffinit_confirm_call_dialogTb4b4b4(Te6edf3call_dialog_textTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffconfirm_call_dialogTff7b72.Td2a8ffdest_identity_hash Tff7b72= Te6edf3senderTff7b72.Td2a8ffidentity
Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffconfirm_call_dialogTff7b72.Td2a8ffopenTb4b4b4(Tb4b4b4)

Te6edf3ClockTff7b72.Td2a8ffschedule_onceTb4b4b4(Te6edf3jobTb4b4b4, T79c0ff0.1Tb4b4b4)

Tff7b72def Td2a8ffreject_actionTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3senderTff7b72=Tff7b72NoneTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffvoice_runningTb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8fftelephoneTff7b72.Td2a8ffis_ringingTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8fftelephoneTff7b72.Td2a8ffhangupTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffinitial_call_profile Tff7b72= Tff7b72None
Tff7b72def Td2a8ffdial_actionTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3senderTff7b72=Tff7b72NoneTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffvoice_runningTb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8fftelephoneTff7b72.Td2a8ffis_availableTb4b4b4:

Te6edf3destination_hash Tff7b72= Te6edf3RNSTff7b72.Td2a8ffDestinationTff7b72.Td2a8ffhash_from_name_and_identityTb4b4b4(Ta5d6ff"Ta5d6fflxst.telephonyTa5d6ff"Tb4b4b4, Tff7b72selfTff7b72.Td2a8ffdial_targetTb4b4b4)
Tff7b72if Tff7b72not Te6edf3RNSTff7b72.Td2a8ffTransportTff7b72.Td2a8ffhas_pathTb4b4b4(Te6edf3destination_hashTb4b4b4)Tb4b4b4: Tff7b72selfTff7b72.Td2a8ffrequest_pathTb4b4b4(Te6edf3destination_hashTb4b4b4)
Tff7b72elseTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffCalling Tffd700{Te6edf3RNSTff7b72.Td2a8ffprettyhexrepTb4b4b4(Tff7b72selfTff7b72.Td2a8ffdial_targetTb4b4b4)Tffd700}Ta5d6ff...Ta5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Tff7b72if Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8fftelephoneTff7b72.Td2a8ffdialTb4b4b4(Tff7b72selfTff7b72.Td2a8ffdial_targetTb4b4b4, Te6edf3profileTff7b72=Tff7b72selfTff7b72.Td2a8ffcall_profileTb4b4b4, Te6edf3modeTff7b72=Tff7b72selfTff7b72.Td2a8ffcall_modeTb4b4b4) Tff7b72== Ta5d6ff"Ta5d6ffno_pathTa5d6ff"Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffrequest_pathTb4b4b4(Te6edf3destination_hashTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffupdate_call_statusTb4b4b4(Tb4b4b4)

Tff7b72elif Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8fftelephoneTff7b72.Td2a8ffis_in_call Tff7b72or Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8fftelephoneTff7b72.Td2a8ffcall_is_connectingTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffHanging upTa5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8fftelephoneTff7b72.Td2a8ffhangupTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffupdate_call_statusTb4b4b4(Tb4b4b4)

Tff7b72elif Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8fftelephoneTff7b72.Td2a8ffis_ringingTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffAnsweringTa5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8fftelephoneTff7b72.Td2a8ffanswerTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffupdate_call_statusTb4b4b4(Tb4b4b4)

Tff7b72selfTff7b72.Td2a8ffinitial_call_profile Tff7b72= Tff7b72None

Tff7b72def Td2a8ffmic_mute_actionTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3senderTff7b72=Tff7b72NoneTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffvoice_runningTb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8fftelephoneTff7b72.Td2a8fftransmit_mutedTb4b4b4: Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8fftelephoneTff7b72.Td2a8ffmute_micTb4b4b4(Tff7b72FalseTb4b4b4)
Tff7b72elseTb4b4b4: Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8fftelephoneTff7b72.Td2a8ffmute_micTb4b4b4(Tff7b72TrueTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffupdate_call_statusTb4b4b4(Tb4b4b4)

Tff7b72def Td2a8ffspk_mute_actionTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3senderTff7b72=Tff7b72NoneTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffvoice_runningTb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8fftelephoneTff7b72.Td2a8ffreceive_mutedTb4b4b4: Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8fftelephoneTff7b72.Td2a8ffmute_spkTb4b4b4(Tff7b72FalseTb4b4b4)
Tff7b72elseTb4b4b4: Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8fftelephoneTff7b72.Td2a8ffmute_spkTb4b4b4(Tff7b72TrueTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffupdate_call_statusTb4b4b4(Tb4b4b4)


T8b949e### Settings screen
T8b949e######################################

Tff7b72def Td2a8ffsettings_actionTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3senderTff7b72=Tff7b72NoneTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72not Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffscreen_managerTff7b72.Td2a8ffhas_screenTb4b4b4(Ta5d6ff"Ta5d6ffvoice_settings_screenTa5d6ff"Tb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffvoice_settings_screen Tff7b72= Te6edf3BuilderTff7b72.Td2a8ffload_stringTb4b4b4(Te6edf3layout_voice_settings_screenTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffvoice_settings_screenTff7b72.Td2a8ffapp Tff7b72= Tff7b72selfTff7b72.Td2a8ffapp
Tff7b72selfTff7b72.Td2a8ffvoice_settings_screenTff7b72.Td2a8ffdelegate Tff7b72= Tff7b72self
Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffscreen_managerTff7b72.Td2a8ffadd_widgetTb4b4b4(Tff7b72selfTff7b72.Td2a8ffvoice_settings_screenTb4b4b4)

Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffscreen_managerTff7b72.Td2a8fftransitionTff7b72.Td2a8ffdirection Tff7b72= Ta5d6ff"Ta5d6ffleftTa5d6ff"
Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffscreen_managerTff7b72.Td2a8ffcurrent Tff7b72= Ta5d6ff"Ta5d6ffvoice_settings_screenTa5d6ff"
Tff7b72selfTff7b72.Td2a8ffvoice_settings_screenTff7b72.Td2a8ffidsTff7b72.Td2a8ffvoice_settings_scrollviewTff7b72.Td2a8ffeffect_cls Tff7b72= Te6edf3ScrollEffect
Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffsetstateTb4b4b4(Ta5d6ff"Ta5d6ffapp.displayingTa5d6ff"Tb4b4b4, Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffscreen_managerTff7b72.Td2a8ffcurrentTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffupdate_settings_screenTb4b4b4(Tb4b4b4)

Tff7b72def Td2a8ffupdate_devicesTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72import T7ee787LXST
Tff7b72selfTff7b72.Td2a8ffoutput_devices Tff7b72= Tb4b4b4[Tb4b4b4]Tb4b4b4; Tff7b72selfTff7b72.Td2a8ffinput_devices Tff7b72= Tb4b4b4[Tb4b4b4]
Tff7b72for Te6edf3device Tff7b72in Te6edf3LXSTTff7b72.Td2a8ffSourcesTff7b72.Td2a8ffBackendTb4b4b4(Tb4b4b4)Tff7b72.Td2a8ffsoundcardTff7b72.Td2a8ffall_speakersTb4b4b4(Tb4b4b4)Tb4b4b4: Tff7b72selfTff7b72.Td2a8ffoutput_devicesTff7b72.Td2a8ffappendTb4b4b4(Te6edf3deviceTff7b72.Td2a8ffnameTb4b4b4)
Tff7b72for Te6edf3device Tff7b72in Te6edf3LXSTTff7b72.Td2a8ffSinksTff7b72.Td2a8ffBackendTb4b4b4(Tb4b4b4)Tff7b72.Td2a8ffsoundcardTff7b72.Td2a8ffall_microphonesTb4b4b4(Tb4b4b4)Tb4b4b4: Tff7b72selfTff7b72.Td2a8ffinput_devicesTff7b72.Td2a8ffappendTb4b4b4(Te6edf3deviceTff7b72.Td2a8ffnameTb4b4b4)
Tff7b72if Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffvoice_outputTa5d6ff"Tb4b4b4] Tff7b72!= Tff7b72NoneTb4b4b4:
Tff7b72if Tff7b72not Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffvoice_outputTa5d6ff"Tb4b4b4] Tff7b72in Tff7b72selfTff7b72.Td2a8ffoutput_devicesTb4b4b4: Tff7b72selfTff7b72.Td2a8ffoutput_devicesTff7b72.Td2a8ffappendTb4b4b4(Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffvoice_outputTa5d6ff"Tb4b4b4]Tb4b4b4)
Tff7b72if Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffvoice_inputTa5d6ff"Tb4b4b4] Tff7b72!= Tff7b72NoneTb4b4b4:
Tff7b72if Tff7b72not Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffvoice_inputTa5d6ff"Tb4b4b4] Tff7b72in Tff7b72selfTff7b72.Td2a8ffinput_devicesTb4b4b4: Tff7b72selfTff7b72.Td2a8ffinput_devicesTff7b72.Td2a8ffappendTb4b4b4(Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffvoice_inputTa5d6ff"Tb4b4b4]Tb4b4b4)
Tff7b72if Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffvoice_ringerTa5d6ff"Tb4b4b4] Tff7b72!= Tff7b72NoneTb4b4b4:
Tff7b72if Tff7b72not Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffvoice_ringerTa5d6ff"Tb4b4b4] Tff7b72in Tff7b72selfTff7b72.Td2a8ffoutput_devicesTb4b4b4: Tff7b72selfTff7b72.Td2a8ffoutput_devicesTff7b72.Td2a8ffappendTb4b4b4(Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffvoice_ringerTa5d6ff"Tb4b4b4]Tb4b4b4)

Tff7b72def Td2a8ffupdate_settings_screenTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3senderTff7b72=Tff7b72NoneTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffvoice_settings_screenTff7b72.Td2a8ffidsTff7b72.Td2a8ffvoice_trusted_onlyTff7b72.Td2a8ffactive Tff7b72= Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffvoice_trusted_onlyTa5d6ff"Tb4b4b4]
Tff7b72selfTff7b72.Td2a8ffvoice_settings_screenTff7b72.Td2a8ffidsTff7b72.Td2a8ffvoice_trusted_onlyTff7b72.Td2a8ffbindTb4b4b4(Te6edf3activeTff7b72=Tff7b72selfTff7b72.Td2a8ffsettings_save_actionTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffvoice_settings_screenTff7b72.Td2a8ffidsTff7b72.Td2a8ffvoice_low_latencyTff7b72.Td2a8ffactive Tff7b72= Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffvoice_low_latencyTa5d6ff"Tb4b4b4]
Tff7b72selfTff7b72.Td2a8ffvoice_settings_screenTff7b72.Td2a8ffidsTff7b72.Td2a8ffvoice_low_latencyTff7b72.Td2a8ffbindTb4b4b4(Te6edf3activeTff7b72=Tff7b72selfTff7b72.Td2a8ffsettings_save_actionTb4b4b4)

Tff7b72if Tff7b72not Te6edf3RNSTff7b72.Td2a8ffvendorTff7b72.Td2a8ffplatformutilsTff7b72.Td2a8ffis_androidTb4b4b4(Tb4b4b4)Tb4b4b4: Tff7b72selfTff7b72.Td2a8ffvoice_settings_screenTff7b72.Td2a8ffidsTff7b72.Td2a8ffvoice_low_latencyTff7b72.Td2a8ffdisabled Tff7b72= Tff7b72True

Te6edf3bp Tff7b72= T79c0ff6Tb4b4b4; Te6edf3ml Tff7b72= T79c0ff38Tb4b4b4; Te6edf3fs Tff7b72= T79c0ff16Tb4b4b4; Te6edf3ics Tff7b72= T79c0ff14
Tff7b72selfTff7b72.Td2a8ffupdate_devicesTb4b4b4(Tb4b4b4)

T8b949e# Output devices
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6ffsystem_defaultTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8fflisted_output_devicesTb4b4b4:
Te6edf3default_output_button Tff7b72= Te6edf3MDRectangleFlatIconButtonTb4b4b4(Te6edf3textTff7b72=Ta5d6ff"Ta5d6ffSystem DefaultTa5d6ff"Tb4b4b4, Te6edf3font_sizeTff7b72=Te6edf3dpTb4b4b4(Te6edf3fsTb4b4b4)Tb4b4b4, Te6edf3icon_sizeTff7b72=Te6edf3dpTb4b4b4(Te6edf3icsTb4b4b4)Tb4b4b4, Te6edf3on_releaseTff7b72=Tff7b72selfTff7b72.Td2a8ffoutput_device_actionTb4b4b4)
Te6edf3default_output_buttonTff7b72.Td2a8ffdevice Tff7b72= Tff7b72NoneTb4b4b4; Te6edf3default_output_buttonTff7b72.Td2a8ffsize_hint Tff7b72= Tb4b4b4[T79c0ff1.0Tb4b4b4, Tff7b72NoneTb4b4b4]
Tff7b72if Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffvoice_outputTa5d6ff"Tb4b4b4] Tff7b72== Tff7b72NoneTb4b4b4: Te6edf3default_output_buttonTff7b72.Td2a8fficon Tff7b72= Ta5d6ff"Ta5d6ffcheckTa5d6ff"
Tff7b72selfTff7b72.Td2a8ffvoice_settings_screenTff7b72.Td2a8ffidsTff7b72.Td2a8ffoutput_devicesTff7b72.Td2a8ffadd_widgetTb4b4b4(Te6edf3default_output_buttonTb4b4b4)
Tff7b72selfTff7b72.Td2a8fflisted_output_devicesTff7b72.Td2a8ffappendTb4b4b4(Ta5d6ff"Ta5d6ffsystem_defaultTa5d6ff"Tb4b4b4)

Tff7b72for Te6edf3device Tff7b72in Tff7b72selfTff7b72.Td2a8ffoutput_devicesTb4b4b4:
Tff7b72if Tff7b72not Te6edf3device Tff7b72in Tff7b72selfTff7b72.Td2a8fflisted_output_devicesTb4b4b4:
Te6edf3device_str Tff7b72= Te6edf3deviceTff7b72.Td2a8ffreplaceTb4b4b4(Ta5d6ff"Ta5d6ff[Ta5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff"Tb4b4b4)Tff7b72.Td2a8ffreplaceTb4b4b4(Ta5d6ff"Ta5d6ff]Ta5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff"Tb4b4b4)
Te6edf3label Tff7b72= Te6edf3device_str Tff7b72if Tffa657lenTb4b4b4(Te6edf3device_strTb4b4b4) Tff7b72< Te6edf3ml Tff7b72else Te6edf3device_strTb4b4b4[Tb4b4b4:Te6edf3mlTff7b72-T79c0ff3Tb4b4b4]Tff7b72+Ta5d6ff"Ta5d6ff...Ta5d6ff"
Te6edf3device_button Tff7b72= Te6edf3MDRectangleFlatIconButtonTb4b4b4(Te6edf3textTff7b72=Te6edf3labelTb4b4b4, Te6edf3font_sizeTff7b72=Te6edf3dpTb4b4b4(Te6edf3fsTb4b4b4)Tb4b4b4, Te6edf3icon_sizeTff7b72=Te6edf3dpTb4b4b4(Te6edf3icsTb4b4b4)Tb4b4b4, Te6edf3on_releaseTff7b72=Tff7b72selfTff7b72.Td2a8ffoutput_device_actionTb4b4b4)
Te6edf3device_buttonTff7b72.Td2a8ffpadding Tff7b72= Tb4b4b4[Te6edf3dpTb4b4b4(Te6edf3bpTb4b4b4)Tb4b4b4, Te6edf3dpTb4b4b4(Te6edf3bpTb4b4b4)Tb4b4b4, Te6edf3dpTb4b4b4(Te6edf3bpTb4b4b4)Tb4b4b4, Te6edf3dpTb4b4b4(Te6edf3bpTb4b4b4)Tb4b4b4]Tb4b4b4; Te6edf3device_buttonTff7b72.Td2a8ffsize_hint Tff7b72= Tb4b4b4[T79c0ff1.0Tb4b4b4, Tff7b72NoneTb4b4b4]
Tff7b72if Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffvoice_outputTa5d6ff"Tb4b4b4] Tff7b72== Te6edf3deviceTb4b4b4: Te6edf3device_buttonTff7b72.Td2a8fficon Tff7b72= Ta5d6ff"Ta5d6ffcheckTa5d6ff"
Te6edf3device_buttonTff7b72.Td2a8ffdevice Tff7b72= Te6edf3device
Tff7b72selfTff7b72.Td2a8ffvoice_settings_screenTff7b72.Td2a8ffidsTff7b72.Td2a8ffoutput_devicesTff7b72.Td2a8ffadd_widgetTb4b4b4(Te6edf3device_buttonTb4b4b4)
Tff7b72selfTff7b72.Td2a8fflisted_output_devicesTff7b72.Td2a8ffappendTb4b4b4(Te6edf3deviceTb4b4b4)

T8b949e# Input devices
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6ffsystem_defaultTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8fflisted_input_devicesTb4b4b4:
Te6edf3default_input_button Tff7b72= Te6edf3MDRectangleFlatIconButtonTb4b4b4(Te6edf3textTff7b72=Ta5d6ff"Ta5d6ffSystem DefaultTa5d6ff"Tb4b4b4, Te6edf3font_sizeTff7b72=Te6edf3dpTb4b4b4(Te6edf3fsTb4b4b4)Tb4b4b4, Te6edf3icon_sizeTff7b72=Te6edf3dpTb4b4b4(Te6edf3icsTb4b4b4)Tb4b4b4, Te6edf3on_releaseTff7b72=Tff7b72selfTff7b72.Td2a8ffinput_device_actionTb4b4b4)
Te6edf3default_input_buttonTff7b72.Td2a8ffdevice Tff7b72= Tff7b72NoneTb4b4b4; Te6edf3default_input_buttonTff7b72.Td2a8ffsize_hint Tff7b72= Tb4b4b4[T79c0ff1.0Tb4b4b4, Tff7b72NoneTb4b4b4]
Tff7b72if Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffvoice_outputTa5d6ff"Tb4b4b4] Tff7b72== Tff7b72NoneTb4b4b4: Te6edf3default_input_buttonTff7b72.Td2a8fficon Tff7b72= Ta5d6ff"Ta5d6ffcheckTa5d6ff"
Tff7b72selfTff7b72.Td2a8ffvoice_settings_screenTff7b72.Td2a8ffidsTff7b72.Td2a8ffinput_devicesTff7b72.Td2a8ffadd_widgetTb4b4b4(Te6edf3default_input_buttonTb4b4b4)
Tff7b72selfTff7b72.Td2a8fflisted_input_devicesTff7b72.Td2a8ffappendTb4b4b4(Ta5d6ff"Ta5d6ffsystem_defaultTa5d6ff"Tb4b4b4)

Tff7b72for Te6edf3device Tff7b72in Tff7b72selfTff7b72.Td2a8ffinput_devicesTb4b4b4:
Tff7b72if Tff7b72not Te6edf3device Tff7b72in Tff7b72selfTff7b72.Td2a8fflisted_input_devicesTb4b4b4:
Te6edf3device_str Tff7b72= Te6edf3deviceTff7b72.Td2a8ffreplaceTb4b4b4(Ta5d6ff"Ta5d6ff[Ta5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff"Tb4b4b4)Tff7b72.Td2a8ffreplaceTb4b4b4(Ta5d6ff"Ta5d6ff]Ta5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff"Tb4b4b4)
Te6edf3label Tff7b72= Te6edf3device_str Tff7b72if Tffa657lenTb4b4b4(Te6edf3device_strTb4b4b4) Tff7b72< Te6edf3ml Tff7b72else Te6edf3device_strTb4b4b4[Tb4b4b4:Te6edf3mlTff7b72-T79c0ff3Tb4b4b4]Tff7b72+Ta5d6ff"Ta5d6ff...Ta5d6ff"
Te6edf3device_button Tff7b72= Te6edf3MDRectangleFlatIconButtonTb4b4b4(Te6edf3textTff7b72=Te6edf3labelTb4b4b4, Te6edf3font_sizeTff7b72=Te6edf3dpTb4b4b4(Te6edf3fsTb4b4b4)Tb4b4b4, Te6edf3icon_sizeTff7b72=Te6edf3dpTb4b4b4(Te6edf3icsTb4b4b4)Tb4b4b4, Te6edf3on_releaseTff7b72=Tff7b72selfTff7b72.Td2a8ffinput_device_actionTb4b4b4)
Te6edf3device_buttonTff7b72.Td2a8ffpadding Tff7b72= Tb4b4b4[Te6edf3dpTb4b4b4(Te6edf3bpTb4b4b4)Tb4b4b4, Te6edf3dpTb4b4b4(Te6edf3bpTb4b4b4)Tb4b4b4, Te6edf3dpTb4b4b4(Te6edf3bpTb4b4b4)Tb4b4b4, Te6edf3dpTb4b4b4(Te6edf3bpTb4b4b4)Tb4b4b4]Tb4b4b4; Te6edf3device_buttonTff7b72.Td2a8ffsize_hint Tff7b72= Tb4b4b4[T79c0ff1.0Tb4b4b4, Tff7b72NoneTb4b4b4]
Tff7b72if Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffvoice_inputTa5d6ff"Tb4b4b4] Tff7b72== Te6edf3deviceTb4b4b4: Te6edf3device_buttonTff7b72.Td2a8fficon Tff7b72= Ta5d6ff"Ta5d6ffcheckTa5d6ff"
Te6edf3device_buttonTff7b72.Td2a8ffdevice Tff7b72= Te6edf3device
Tff7b72selfTff7b72.Td2a8ffvoice_settings_screenTff7b72.Td2a8ffidsTff7b72.Td2a8ffinput_devicesTff7b72.Td2a8ffadd_widgetTb4b4b4(Te6edf3device_buttonTb4b4b4)
Tff7b72selfTff7b72.Td2a8fflisted_input_devicesTff7b72.Td2a8ffappendTb4b4b4(Te6edf3deviceTb4b4b4)

T8b949e# Ringer devices
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6ffsystem_defaultTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8fflisted_ringer_devicesTb4b4b4:
Te6edf3default_ringer_button Tff7b72= Te6edf3MDRectangleFlatIconButtonTb4b4b4(Te6edf3textTff7b72=Ta5d6ff"Ta5d6ffSystem DefaultTa5d6ff"Tb4b4b4, Te6edf3font_sizeTff7b72=Te6edf3dpTb4b4b4(Te6edf3fsTb4b4b4)Tb4b4b4, Te6edf3icon_sizeTff7b72=Te6edf3dpTb4b4b4(Te6edf3icsTb4b4b4)Tb4b4b4, Te6edf3on_releaseTff7b72=Tff7b72selfTff7b72.Td2a8ffringer_device_actionTb4b4b4)
Te6edf3default_ringer_buttonTff7b72.Td2a8ffdevice Tff7b72= Tff7b72NoneTb4b4b4; Te6edf3default_ringer_buttonTff7b72.Td2a8ffsize_hint Tff7b72= Tb4b4b4[T79c0ff1.0Tb4b4b4, Tff7b72NoneTb4b4b4]
Tff7b72if Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffvoice_ringerTa5d6ff"Tb4b4b4] Tff7b72== Tff7b72NoneTb4b4b4: Te6edf3default_ringer_buttonTff7b72.Td2a8fficon Tff7b72= Ta5d6ff"Ta5d6ffcheckTa5d6ff"
Tff7b72selfTff7b72.Td2a8ffvoice_settings_screenTff7b72.Td2a8ffidsTff7b72.Td2a8ffringer_devicesTff7b72.Td2a8ffadd_widgetTb4b4b4(Te6edf3default_ringer_buttonTb4b4b4)
Tff7b72selfTff7b72.Td2a8fflisted_ringer_devicesTff7b72.Td2a8ffappendTb4b4b4(Ta5d6ff"Ta5d6ffsystem_defaultTa5d6ff"Tb4b4b4)

Tff7b72for Te6edf3device Tff7b72in Tff7b72selfTff7b72.Td2a8ffoutput_devicesTb4b4b4:
Tff7b72if Tff7b72not Te6edf3device Tff7b72in Tff7b72selfTff7b72.Td2a8fflisted_ringer_devicesTb4b4b4:
Te6edf3device_str Tff7b72= Te6edf3deviceTff7b72.Td2a8ffreplaceTb4b4b4(Ta5d6ff"Ta5d6ff[Ta5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff"Tb4b4b4)Tff7b72.Td2a8ffreplaceTb4b4b4(Ta5d6ff"Ta5d6ff]Ta5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff"Tb4b4b4)
Te6edf3label Tff7b72= Te6edf3device_str Tff7b72if Tffa657lenTb4b4b4(Te6edf3device_strTb4b4b4) Tff7b72< Te6edf3ml Tff7b72else Te6edf3device_strTb4b4b4[Tb4b4b4:Te6edf3mlTff7b72-T79c0ff3Tb4b4b4]Tff7b72+Ta5d6ff"Ta5d6ff...Ta5d6ff"
Te6edf3device_button Tff7b72= Te6edf3MDRectangleFlatIconButtonTb4b4b4(Te6edf3textTff7b72=Te6edf3labelTb4b4b4, Te6edf3font_sizeTff7b72=Te6edf3dpTb4b4b4(Te6edf3fsTb4b4b4)Tb4b4b4, Te6edf3icon_sizeTff7b72=Te6edf3dpTb4b4b4(Te6edf3icsTb4b4b4)Tb4b4b4, Te6edf3on_releaseTff7b72=Tff7b72selfTff7b72.Td2a8ffringer_device_actionTb4b4b4)
Te6edf3device_buttonTff7b72.Td2a8ffpadding Tff7b72= Tb4b4b4[Te6edf3dpTb4b4b4(Te6edf3bpTb4b4b4)Tb4b4b4, Te6edf3dpTb4b4b4(Te6edf3bpTb4b4b4)Tb4b4b4, Te6edf3dpTb4b4b4(Te6edf3bpTb4b4b4)Tb4b4b4, Te6edf3dpTb4b4b4(Te6edf3bpTb4b4b4)Tb4b4b4]Tb4b4b4; Te6edf3device_buttonTff7b72.Td2a8ffsize_hint Tff7b72= Tb4b4b4[T79c0ff1.0Tb4b4b4, Tff7b72NoneTb4b4b4]
Tff7b72if Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffvoice_ringerTa5d6ff"Tb4b4b4] Tff7b72== Te6edf3deviceTb4b4b4: Te6edf3device_buttonTff7b72.Td2a8fficon Tff7b72= Ta5d6ff"Ta5d6ffcheckTa5d6ff"
Te6edf3device_buttonTff7b72.Td2a8ffdevice Tff7b72= Te6edf3device
Tff7b72selfTff7b72.Td2a8ffvoice_settings_screenTff7b72.Td2a8ffidsTff7b72.Td2a8ffringer_devicesTff7b72.Td2a8ffadd_widgetTb4b4b4(Te6edf3device_buttonTb4b4b4)
Tff7b72selfTff7b72.Td2a8fflisted_ringer_devicesTff7b72.Td2a8ffappendTb4b4b4(Te6edf3deviceTb4b4b4)

Tff7b72def Td2a8ffsettings_save_actionTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3senderTff7b72=Tff7b72NoneTb4b4b4, Te6edf3eventTff7b72=Tff7b72NoneTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffvoice_trusted_onlyTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72selfTff7b72.Td2a8ffvoice_settings_screenTff7b72.Td2a8ffidsTff7b72.Td2a8ffvoice_trusted_onlyTff7b72.Td2a8ffactive
Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffvoice_low_latencyTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72selfTff7b72.Td2a8ffvoice_settings_screenTff7b72.Td2a8ffidsTff7b72.Td2a8ffvoice_low_latencyTff7b72.Td2a8ffactive
Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffsave_configurationTb4b4b4(Tb4b4b4)
Tff7b72if Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8fftelephoneTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8fftelephoneTff7b72.Td2a8ffset_low_latency_outputTb4b4b4(Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffvoice_low_latencyTa5d6ff"Tb4b4b4]Tb4b4b4)

Tff7b72def Td2a8ffoutput_device_actionTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3senderTff7b72=Tff7b72NoneTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffvoice_outputTa5d6ff"Tb4b4b4] Tff7b72= Te6edf3senderTff7b72.Td2a8ffdevice
Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffsave_configurationTb4b4b4(Tb4b4b4)
Tff7b72for Te6edf3w Tff7b72in Tff7b72selfTff7b72.Td2a8ffvoice_settings_screenTff7b72.Td2a8ffidsTff7b72.Td2a8ffoutput_devicesTff7b72.Td2a8ffchildrenTb4b4b4: Te6edf3wTff7b72.Td2a8fficon Tff7b72= Ta5d6ff"Ta5d6ff"
Te6edf3senderTff7b72.Td2a8fficon Tff7b72= Ta5d6ff"Ta5d6ffcheckTa5d6ff"
Tff7b72if Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8fftelephoneTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8fftelephoneTff7b72.Td2a8ffset_speakerTb4b4b4(Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffvoice_outputTa5d6ff"Tb4b4b4]Tb4b4b4)

Tff7b72def Td2a8ffinput_device_actionTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3senderTff7b72=Tff7b72NoneTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffvoice_inputTa5d6ff"Tb4b4b4] Tff7b72= Te6edf3senderTff7b72.Td2a8ffdevice
Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffsave_configurationTb4b4b4(Tb4b4b4)
Tff7b72for Te6edf3w Tff7b72in Tff7b72selfTff7b72.Td2a8ffvoice_settings_screenTff7b72.Td2a8ffidsTff7b72.Td2a8ffinput_devicesTff7b72.Td2a8ffchildrenTb4b4b4: Te6edf3wTff7b72.Td2a8fficon Tff7b72= Ta5d6ff"Ta5d6ff"
Te6edf3senderTff7b72.Td2a8fficon Tff7b72= Ta5d6ff"Ta5d6ffcheckTa5d6ff"
Tff7b72if Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8fftelephoneTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8fftelephoneTff7b72.Td2a8ffset_microphoneTb4b4b4(Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffvoice_inputTa5d6ff"Tb4b4b4]Tb4b4b4)

Tff7b72def Td2a8ffringer_device_actionTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3senderTff7b72=Tff7b72NoneTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffvoice_ringerTa5d6ff"Tb4b4b4] Tff7b72= Te6edf3senderTff7b72.Td2a8ffdevice
Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffsave_configurationTb4b4b4(Tb4b4b4)
Tff7b72for Te6edf3w Tff7b72in Tff7b72selfTff7b72.Td2a8ffvoice_settings_screenTff7b72.Td2a8ffidsTff7b72.Td2a8ffringer_devicesTff7b72.Td2a8ffchildrenTb4b4b4: Te6edf3wTff7b72.Td2a8fficon Tff7b72= Ta5d6ff"Ta5d6ff"
Te6edf3senderTff7b72.Td2a8fficon Tff7b72= Ta5d6ff"Ta5d6ffcheckTa5d6ff"
Tff7b72if Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8fftelephoneTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8fftelephoneTff7b72.Td2a8ffset_ringerTb4b4b4(Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffvoice_ringerTa5d6ff"Tb4b4b4]Tb4b4b4)


T8b949e### Call log
T8b949e######################################

Tff7b72def Td2a8ffupdate_call_logTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8fflog_list Tff7b72== Tff7b72NoneTb4b4b4:
Tff7b72selfTff7b72.Td2a8fflog_list Tff7b72= Te6edf3CallListTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffscreenTff7b72.Td2a8ffidsTff7b72.Td2a8fflog_list_containerTff7b72.Td2a8ffadd_widgetTb4b4b4(Tff7b72selfTff7b72.Td2a8fflog_listTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffupdate_log_listTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8fflast_log_update Tff7b72= Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4)

Tff7b72def Td2a8ffupdate_log_listTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72not Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8fftelephoneTb4b4b4: Tff7b72selfTff7b72.Td2a8fflog_listTff7b72.Td2a8ffdata Tff7b72= Tb4b4b4[Tb4b4b4]
Tff7b72elseTb4b4b4:
Te6edf3LogEntryTff7b72.Td2a8ffowner Tff7b72= Tff7b72self
Te6edf3call_log Tff7b72= Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8fftelephoneTff7b72.Td2a8ffget_call_logTb4b4b4(Tb4b4b4)
Te6edf3call_logTff7b72.Td2a8ffsortTb4b4b4(Te6edf3keyTff7b72=Tff7b72lambda Te6edf3eTb4b4b4: Te6edf3eTb4b4b4[Ta5d6ff"Ta5d6fftimeTa5d6ff"Tb4b4b4]Tb4b4b4, Te6edf3reverseTff7b72=Tff7b72TrueTb4b4b4)
Te6edf3data Tff7b72= Tb4b4b4[Tb4b4b4]
Tff7b72for Te6edf3entry Tff7b72in Te6edf3call_logTb4b4b4:
Tff7b72tryTb4b4b4:
Te6edf3at Tff7b72= Te6edf3entryTb4b4b4[Ta5d6ff"Ta5d6fftimeTa5d6ff"Tb4b4b4]
Te6edf3td Tff7b72= Tffa657intTb4b4b4(Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4)Tb4b4b4)Tff7b72-Tffa657intTb4b4b4(Te6edf3atTb4b4b4)
Te6edf3evt Tff7b72= Te6edf3entryTb4b4b4[Ta5d6ff"Ta5d6ffeventTa5d6ff"Tb4b4b4]
Te6edf3idnt Tff7b72= Te6edf3entryTb4b4b4[Ta5d6ff"Ta5d6ffidentityTa5d6ff"Tb4b4b4]

Tff7b72if Tff7b72not Te6edf3idnt Tff7b72in Tff7b72selfTff7b72.Td2a8fflog_name_cacheTb4b4b4: Tff7b72selfTff7b72.Td2a8fflog_name_cacheTb4b4b4[Te6edf3idntTb4b4b4] Tff7b72= Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffvoice_display_nameTb4b4b4(Te6edf3idntTb4b4b4)
Te6edf3name Tff7b72= Te6edf3multilingual_markupTb4b4b4(Te6edf3escape_markupTb4b4b4(Tffa657strTb4b4b4(Tff7b72selfTff7b72.Td2a8fflog_name_cacheTb4b4b4[Te6edf3idntTb4b4b4]Tb4b4b4)Tb4b4b4)Tff7b72.Td2a8ffencodeTb4b4b4(Ta5d6ff"Ta5d6ffutf-8Ta5d6ff"Tb4b4b4)Tb4b4b4)Tff7b72.Td2a8ffdecodeTb4b4b4(Ta5d6ff"Ta5d6ffutf-8Ta5d6ff"Tb4b4b4)

Te6edf3icon Tff7b72= Tff7b72None
Tff7b72if Te6edf3evt Tff7b72== Ta5d6ff"Ta5d6ffincoming-missedTa5d6ff"Tb4b4b4: Te6edf3icon Tff7b72= Ta5d6ff"Ta5d6ffphone-missedTa5d6ff"
Tff7b72elif Te6edf3evt Tff7b72== Ta5d6ff"Ta5d6ffoutgoing-failureTa5d6ff"Tb4b4b4: Te6edf3icon Tff7b72= Ta5d6ff"Ta5d6ffphone-removeTa5d6ff"
Tff7b72elif Te6edf3evt Tff7b72== Ta5d6ff"Ta5d6ffincoming-successTa5d6ff"Tb4b4b4: Te6edf3icon Tff7b72= Ta5d6ff"Ta5d6ffphone-incomingTa5d6ff"
Tff7b72elif Te6edf3evt Tff7b72== Ta5d6ff"Ta5d6ffoutgoing-successTa5d6ff"Tb4b4b4: Te6edf3icon Tff7b72= Ta5d6ff"Ta5d6ffphone-outgoingTa5d6ff"

Te6edf3time_str Tff7b72= Tff7b72None
Tff7b72if Te6edf3td Tff7b72< T79c0ff60Tb4b4b4: Te6edf3time_str Tff7b72= Ta5d6ff"Ta5d6ffJust nowTa5d6ff"
Tff7b72elif Te6edf3td Tff7b72< T79c0ff60Tff7b72*T79c0ff60Tb4b4b4: Te6edf3td Tff7b72= Tffa657intTb4b4b4(Tb4b4b4(Te6edf3tdTff7b72/Tff7b72/T79c0ff60Tb4b4b4)Tff7b72*T79c0ff60Tb4b4b4)
Tff7b72elif Te6edf3td Tff7b72< T79c0ff60Tff7b72*T79c0ff60Tff7b72*T79c0ff24Tb4b4b4: Te6edf3td Tff7b72= Tffa657intTb4b4b4(Tb4b4b4(Te6edf3tdTff7b72/Tff7b72/T79c0ff60Tb4b4b4)Tff7b72*T79c0ff60Tb4b4b4)
Tff7b72elif Te6edf3td Tff7b72< T79c0ff60Tff7b72*T79c0ff60Tff7b72*T79c0ff24Tff7b72*T79c0ff7Tb4b4b4: Te6edf3td Tff7b72= Tffa657intTb4b4b4(Tb4b4b4(Te6edf3tdTff7b72/Tff7b72/Tb4b4b4(T79c0ff60Tff7b72*T79c0ff60Tff7b72*T79c0ff24Tb4b4b4)Tb4b4b4)Tff7b72*Tb4b4b4(T79c0ff60Tff7b72*T79c0ff60Tff7b72*T79c0ff24Tb4b4b4)Tb4b4b4)
Tff7b72elseTb4b4b4: Te6edf3time_str Tff7b72= Te6edf3timeTff7b72.Td2a8ffstrftimeTb4b4b4(Te6edf3ts_format_dateTb4b4b4, Te6edf3timeTff7b72.Td2a8fflocaltimeTb4b4b4(Te6edf3atTb4b4b4)Tb4b4b4)

Tff7b72if Te6edf3time_str Tff7b72== Tff7b72NoneTb4b4b4: Te6edf3time_str Tff7b72= Ta5d6fffTa5d6ff"Tffd700{Te6edf3RNSTff7b72.Td2a8ffprettytimeTb4b4b4(Te6edf3tdTb4b4b4)Tffd700}Ta5d6ff agoTa5d6ff"

Tff7b72if Te6edf3iconTb4b4b4:
Te6edf3info Tff7b72= Ta5d6fffTa5d6ff"Tffd700{Te6edf3nameTffd700}Ta5d6ff • [i]Tffd700{Te6edf3time_strTffd700}Ta5d6ff[/i]Ta5d6ff"
Te6edf3entry Tff7b72= Tb4b4b4{Ta5d6ff"Ta5d6fficonTa5d6ff"Tb4b4b4: Te6edf3iconTb4b4b4, Ta5d6ff"Ta5d6fftextTa5d6ff"Tb4b4b4: Ta5d6fffTa5d6ff"Tffd700{Te6edf3infoTffd700}Ta5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffidentityTa5d6ff"Tb4b4b4: Te6edf3idntTb4b4b4}
Te6edf3dataTff7b72.Td2a8ffappendTb4b4b4(Te6edf3entryTb4b4b4)

Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffAn error occurred while updating the call log list: Tffd700{Te6edf3eTffd700}Ta5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Te6edf3RNSTff7b72.Td2a8fftrace_exceptionTb4b4b4(Te6edf3eTb4b4b4)

Tff7b72selfTff7b72.Td2a8fflog_listTff7b72.Td2a8ffdata Tff7b72= Te6edf3data

Tff7b72class T56d364LogEntryTb4b4b4(Te6edf3OneLineAvatarIconListItemTb4b4b4)Tb4b4b4:
Te6edf3owner Tff7b72= Tff7b72None

Te6edf3icon Tff7b72= Te6edf3StringPropertyTb4b4b4(Tb4b4b4)
T8b949e# ti_color = OptionProperty(None, options=theme_text_color_options)
T8b949e# icon_fg = Property(None, allownone=True)
T8b949e# icon_bg = Property(None, allownone=True)
Tff7b72def Tff7b72__init__Tb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tffa657superTb4b4b4(Tb4b4b4)Tff7b72.Td2a8ff__init__Tb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffbindTb4b4b4(Te6edf3on_releaseTff7b72=Tff7b72selfTff7b72.Td2a8ffdial_actionTb4b4b4)
T8b949e# self.ids.left_icon.bind(on_release=self.left_icon_action)
T8b949e# self.ids.right_icon.bind(on_release=self.right_icon_action)

Tff7b72def Td2a8ffdial_actionTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3senderTff7b72=Tff7b72NoneTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffownerTff7b72.Td2a8fflog_dial_actionTb4b4b4(Tff7b72selfTb4b4b4)

Tff7b72def Td2a8ffleft_icon_actionTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3senderTb4b4b4)Tb4b4b4:
Tff7b72pass

Tff7b72def Td2a8ffright_icon_actionTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3senderTb4b4b4)Tb4b4b4:
Tff7b72pass

Tff7b72class T56d364CallListTb4b4b4(Te6edf3MDRecycleViewTb4b4b4)Tb4b4b4:
Tff7b72def Tff7b72__init__Tb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tffa657superTb4b4b4(Tb4b4b4)Tff7b72.Td2a8ff__init__Tb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffdata Tff7b72= Tb4b4b4[Tb4b4b4]

Te6edf3BuilderTff7b72.Td2a8ffload_stringTb4b4b4(Ta5d6ff"""
Ta5d6ff<LogEntry>
Ta5d6ff IconLeftWidget:
Ta5d6ff id: left_icon
Ta5d6ff # theme_icon_color: root.ti_color
Ta5d6ff # icon_color: root.icon_fg
Ta5d6ff # md_bg_color: root.icon_bg
Ta5d6ff icon: root.icon
Ta5d6ff _default_icon_pad: dp(14)
Ta5d6ff icon_size: dp(24)
Ta5d6ff
Ta5d6ff # IconRightWidget:
Ta5d6ff # id: right_icon
Ta5d6ff # icon: Ta5d6ff"Ta5d6ffdots-verticalTa5d6ff"

Ta5d6ff<CallList>:
Ta5d6ff id: calls_scrollview
Ta5d6ff viewclass: Ta5d6ff"Ta5d6ffLogEntryTa5d6ff"
Ta5d6ff effect_cls: Ta5d6ff"Ta5d6ffScrollEffectTa5d6ff"

Ta5d6ff RecycleBoxLayout:
Ta5d6ff default_size: None, dp(57)
Ta5d6ff default_size_hint: 1, None
Ta5d6ff size_hint_y: None
Ta5d6ff height: self.minimum_height
Ta5d6ff orientation: Ta5d6ff"Ta5d6ffverticalTa5d6ff"
Ta5d6ff"""Tb4b4b4)

Te6edf3layout_voice_screen Tff7b72= Ta5d6ff"""
Ta5d6ffMDScreen:
Ta5d6ff name: Ta5d6ff"Ta5d6ffvoice_screenTa5d6ff"
Ta5d6ff
Ta5d6ff BoxLayout:
Ta5d6ff orientation: Ta5d6ff"Ta5d6ffverticalTa5d6ff"

Ta5d6ff MDTopAppBar:
Ta5d6ff title: Ta5d6ff"Ta5d6ffVoiceTa5d6ff"
Ta5d6ff anchor_title: Ta5d6ff"Ta5d6ffleftTa5d6ff"
Ta5d6ff elevation: 0
Ta5d6ff left_action_items:
Ta5d6ff [[Ta5d6ff'Ta5d6ffmenuTa5d6ff'Ta5d6ff, lambda x: root.app.nav_drawer.set_state(Ta5d6ff"Ta5d6ffopenTa5d6ff"Ta5d6ff)]]
Ta5d6ff right_action_items:
Ta5d6ff [
Ta5d6ff [Ta5d6ff'Ta5d6ffwrench-cogTa5d6ff'Ta5d6ff, lambda x: root.delegate.settings_action(self)],
Ta5d6ff [Ta5d6ff'Ta5d6ffcloseTa5d6ff'Ta5d6ff, lambda x: root.app.close_any_action(self)],
Ta5d6ff ]

Ta5d6ff MDBoxLayout:
Ta5d6ff orientation: Ta5d6ff"Ta5d6ffverticalTa5d6ff"
Ta5d6ff size_hint_y: None
Ta5d6ff height: self.minimum_height
Ta5d6ff padding: [dp(28), dp(12), dp(28), dp(16)]

Ta5d6ff MDBoxLayout:
Ta5d6ff orientation: Ta5d6ff"Ta5d6ffverticalTa5d6ff"
Ta5d6ff # spacing: Ta5d6ff"Ta5d6ff24dpTa5d6ff"
Ta5d6ff size_hint_y: None
Ta5d6ff height: self.minimum_height
Ta5d6ff padding: [dp(0), dp(12), dp(0), dp(0)]

Ta5d6ff MDTextField:
Ta5d6ff id: identity_hash
Ta5d6ff hint_text: Ta5d6ff"Ta5d6ffIdentity hashTa5d6ff"
Ta5d6ff mode: Ta5d6ff"Ta5d6ffrectangleTa5d6ff"
Ta5d6ff # size_hint: [1.0, None]
Ta5d6ff pos_hint: Ta5d6ff{Ta5d6ff"Ta5d6ffcenter_xTa5d6ff"Ta5d6ff: .5}
Ta5d6ff max_text_length: 32
Ta5d6ff on_text: root.delegate.target_input_action(self)

Ta5d6ff MDBoxLayout:
Ta5d6ff orientation: Ta5d6ff"Ta5d6ffverticalTa5d6ff"
Ta5d6ff spacing: Ta5d6ff"Ta5d6ff24dpTa5d6ff"
Ta5d6ff size_hint_y: None
Ta5d6ff height: self.minimum_height
Ta5d6ff padding: [dp(0), dp(35), dp(0), dp(14)]

Ta5d6ff MDBoxLayout:
Ta5d6ff orientation: Ta5d6ff"Ta5d6ffhorizontalTa5d6ff"
Ta5d6ff spacing: Ta5d6ff"Ta5d6ff24dpTa5d6ff"
Ta5d6ff size_hint_y: None
Ta5d6ff height: self.minimum_height
Ta5d6ff padding: [dp(0), dp(0), dp(0), dp(0)]

Ta5d6ff MDRectangleFlatIconButton:
Ta5d6ff id: call_mode_button
Ta5d6ff icon: Ta5d6ff"Ta5d6ffphone-incoming-outgoingTa5d6ff"
Ta5d6ff text: Ta5d6ff"Ta5d6ffFDXTa5d6ff"
Ta5d6ff padding: [dp(0), dp(14), dp(0), dp(14)]
Ta5d6ff icon_size: dp(24)
Ta5d6ff font_size: dp(16)
Ta5d6ff size_hint: [1.0, None]
Ta5d6ff on_release: root.delegate.call_mode_action(self)
Ta5d6ff disabled: False

Ta5d6ff MDRectangleFlatIconButton:
Ta5d6ff id: call_profile_button
Ta5d6ff icon: Ta5d6ff"Ta5d6ffaccount-voiceTa5d6ff"
Ta5d6ff text: Ta5d6ff"Ta5d6ffHQTa5d6ff"
Ta5d6ff padding: [dp(0), dp(14), dp(0), dp(14)]
Ta5d6ff icon_size: dp(24)
Ta5d6ff font_size: dp(16)
Ta5d6ff size_hint: [1.0, None]
Ta5d6ff on_release: root.delegate.call_profile_action(self)
Ta5d6ff disabled: False

Ta5d6ff MDBoxLayout:
Ta5d6ff orientation: Ta5d6ff"Ta5d6ffhorizontalTa5d6ff"
Ta5d6ff spacing: Ta5d6ff"Ta5d6ff24dpTa5d6ff"
Ta5d6ff size_hint_y: None
Ta5d6ff height: self.minimum_height
Ta5d6ff padding: [dp(0), dp(0), dp(0), dp(0)]

Ta5d6ff MDRectangleFlatIconButton:
Ta5d6ff id: reject_button
Ta5d6ff icon: Ta5d6ff"Ta5d6ffphone-cancelTa5d6ff"
Ta5d6ff text: Ta5d6ff"Ta5d6ffRejectTa5d6ff"
Ta5d6ff padding: [dp(0), dp(14), dp(0), dp(14)]
Ta5d6ff icon_size: dp(24)
Ta5d6ff font_size: dp(16)
Ta5d6ff size_hint: [1.0, None]
Ta5d6ff on_release: root.delegate.reject_action(self)
Ta5d6ff disabled: True

Ta5d6ff MDRectangleFlatIconButton:
Ta5d6ff id: dial_button
Ta5d6ff icon: Ta5d6ff"Ta5d6ffphone-outgoingTa5d6ff"
Ta5d6ff text: Ta5d6ff"Ta5d6ffCallTa5d6ff"
Ta5d6ff padding: [dp(0), dp(14), dp(0), dp(14)]
Ta5d6ff icon_size: dp(24)
Ta5d6ff font_size: dp(16)
Ta5d6ff size_hint: [1.0, None]
Ta5d6ff on_release: root.delegate.dial_action(self)
Ta5d6ff disabled: True

Ta5d6ff MDSeparator:
Ta5d6ff orientation: Ta5d6ff"Ta5d6ffhorizontalTa5d6ff"
Ta5d6ff height: dp(1)

Ta5d6ff MDBoxLayout:
Ta5d6ff orientation: Ta5d6ff"Ta5d6ffverticalTa5d6ff"
Ta5d6ff id: log_list_container

Ta5d6ff MDBoxLayout:
Ta5d6ff orientation: Ta5d6ff"Ta5d6ffverticalTa5d6ff"
Ta5d6ff id: call_stats_container
Ta5d6ff spacing: Ta5d6ff"Ta5d6ff24dpTa5d6ff"
Ta5d6ff padding: [dp(28), dp(24), dp(28), dp(24)]

Ta5d6ff MDAnchorLayout:
Ta5d6ff anchor_y: Ta5d6ff'Ta5d6fftopTa5d6ff'

Ta5d6ff MDLabel:
Ta5d6ff id: call_stats_label
Ta5d6ff markup: True
Ta5d6ff text: Ta5d6ff"Ta5d6ffCall statsTa5d6ff"
Ta5d6ff size_hint_y: None
Ta5d6ff text_size: self.width, None
Ta5d6ff height: self.texture_size[1]
Ta5d6ff padding: [dp(0), dp(0), dp(0), dp(0)]

Ta5d6ff MDSeparator:
Ta5d6ff orientation: Ta5d6ff"Ta5d6ffhorizontalTa5d6ff"
Ta5d6ff height: dp(1)

Ta5d6ff MDBoxLayout:
Ta5d6ff id: meta_controls
Ta5d6ff orientation: Ta5d6ff"Ta5d6ffverticalTa5d6ff"
Ta5d6ff size_hint_y: None
Ta5d6ff height: self.minimum_height
Ta5d6ff spacing: Ta5d6ff"Ta5d6ff0dpTa5d6ff"
Ta5d6ff padding: [dp(0), dp(0), dp(0), dp(0)]

Ta5d6ff MDBoxLayout:
Ta5d6ff id: log_controls
Ta5d6ff orientation: Ta5d6ff"Ta5d6ffverticalTa5d6ff"
Ta5d6ff size_hint_y: None
Ta5d6ff height: self.minimum_height
Ta5d6ff spacing: Ta5d6ff"Ta5d6ff24dpTa5d6ff"
Ta5d6ff padding: [dp(28), dp(24), dp(28), dp(24)]

Ta5d6ff MDRectangleFlatIconButton:
Ta5d6ff id: clear_log_button
Ta5d6ff icon: Ta5d6ff"Ta5d6ffplaylist-removeTa5d6ff"
Ta5d6ff text: Ta5d6ff"Ta5d6ffClear LogTa5d6ff"
Ta5d6ff padding: [dp(0), dp(14), dp(0), dp(14)]
Ta5d6ff icon_size: dp(24)
Ta5d6ff font_size: dp(16)
Ta5d6ff size_hint: [1.0, None]
Ta5d6ff on_release: root.delegate.clear_log_action(self)

Ta5d6ff MDBoxLayout:
Ta5d6ff id: call_controls
Ta5d6ff orientation: Ta5d6ff"Ta5d6ffverticalTa5d6ff"
Ta5d6ff size_hint_y: None
Ta5d6ff height: self.minimum_height
Ta5d6ff spacing: Ta5d6ff"Ta5d6ff0dpTa5d6ff"
Ta5d6ff padding: [dp(28), dp(24), dp(28), dp(24)]

Ta5d6ff MDBoxLayout:
Ta5d6ff orientation: Ta5d6ff"Ta5d6ffhorizontalTa5d6ff"
Ta5d6ff spacing: Ta5d6ff"Ta5d6ff24dpTa5d6ff"
Ta5d6ff size_hint_y: None
Ta5d6ff height: self.minimum_height
Ta5d6ff padding: [dp(0), dp(0), dp(0), dp(0)]

Ta5d6ff MDRectangleFlatIconButton:
Ta5d6ff id: mic_mute_button
Ta5d6ff icon: Ta5d6ff"Ta5d6ffmicrophoneTa5d6ff"
Ta5d6ff text: Ta5d6ff"Ta5d6ffMic ActiveTa5d6ff"
Ta5d6ff padding: [dp(0), dp(14), dp(0), dp(14)]
Ta5d6ff icon_size: dp(24)
Ta5d6ff font_size: dp(16)
Ta5d6ff size_hint: [1.0, None]
Ta5d6ff on_release: root.delegate.mic_mute_action(self)
Ta5d6ff disabled: False

Ta5d6ff MDRectangleFlatIconButton:
Ta5d6ff id: spk_mute_button
Ta5d6ff icon: Ta5d6ff"Ta5d6ffvolume-highTa5d6ff"
Ta5d6ff text: Ta5d6ff"Ta5d6ffOutput ActiveTa5d6ff"
Ta5d6ff padding: [dp(0), dp(14), dp(0), dp(14)]
Ta5d6ff icon_size: dp(24)
Ta5d6ff font_size: dp(16)
Ta5d6ff size_hint: [1.0, None]
Ta5d6ff on_release: root.delegate.spk_mute_action(self)
Ta5d6ff disabled: False

Ta5d6ff MDBoxLayout:
Ta5d6ff id: call_ptt_container
Ta5d6ff orientation: Ta5d6ff"Ta5d6ffhorizontalTa5d6ff"
Ta5d6ff spacing: Ta5d6ff"Ta5d6ff0dpTa5d6ff"
Ta5d6ff size_hint_y: None
Ta5d6ff height: self.minimum_height
Ta5d6ff padding: [dp(0), dp(24), dp(0), dp(0)]

Ta5d6ff MDRectangleFlatIconButton:
Ta5d6ff id: call_ptt_button
Ta5d6ff icon: Ta5d6ff"Ta5d6ffmicrophoneTa5d6ff"
Ta5d6ff text: Ta5d6ff"Ta5d6ffPTTTa5d6ff"
Ta5d6ff padding: [dp(0), dp(14), dp(0), dp(14)]
Ta5d6ff icon_size: dp(24)
Ta5d6ff font_size: dp(16)
Ta5d6ff size_hint: [1.0, None]
Ta5d6ff on_press: root.delegate.ptt_down_action(self)
Ta5d6ff on_release: root.delegate.ptt_up_action(self)
Ta5d6ff _no_ripple_effect: True
Ta5d6ff"""

Te6edf3layout_voice_settings_screen Tff7b72= Ta5d6ff"""
Ta5d6ffMDScreen:
Ta5d6ff name: Ta5d6ff"Ta5d6ffvoice_settings_screenTa5d6ff"
Ta5d6ff
Ta5d6ff BoxLayout:
Ta5d6ff orientation: Ta5d6ff"Ta5d6ffverticalTa5d6ff"

Ta5d6ff MDTopAppBar:
Ta5d6ff id: top_bar
Ta5d6ff title: Ta5d6ff"Ta5d6ffVoice ConfigurationTa5d6ff"
Ta5d6ff anchor_title: Ta5d6ff"Ta5d6ffleftTa5d6ff"
Ta5d6ff elevation: 0
Ta5d6ff left_action_items:
Ta5d6ff [[Ta5d6ff'Ta5d6ffmenuTa5d6ff'Ta5d6ff, lambda x: root.app.nav_drawer.set_state(Ta5d6ff"Ta5d6ffopenTa5d6ff"Ta5d6ff)]]
Ta5d6ff right_action_items:
Ta5d6ff [
Ta5d6ff [Ta5d6ff'Ta5d6ffcloseTa5d6ff'Ta5d6ff, lambda x: root.app.close_sub_voice_action(self)],
Ta5d6ff ]

Ta5d6ff MDScrollView:
Ta5d6ff id: voice_settings_scrollview
Ta5d6ff size_hint_x: 1
Ta5d6ff size_hint_y: None
Ta5d6ff size: [root.width, root.height-root.ids.top_bar.height]
Ta5d6ff do_scroll_x: False
Ta5d6ff do_scroll_y: True

Ta5d6ff MDBoxLayout:
Ta5d6ff orientation: Ta5d6ff"Ta5d6ffverticalTa5d6ff"
Ta5d6ff size_hint_y: None
Ta5d6ff height: self.minimum_height
Ta5d6ff padding: [dp(28), dp(48), dp(28), dp(16)]

Ta5d6ff MDLabel:
Ta5d6ff text: Ta5d6ff"Ta5d6ffCall HandlingTa5d6ff"
Ta5d6ff font_style: Ta5d6ff"Ta5d6ffH6Ta5d6ff"
Ta5d6ff height: self.texture_size[1]
Ta5d6ff padding: [dp(0), dp(0), dp(0), dp(12)]

Ta5d6ff MDLabel:
Ta5d6ff id: voice_settings_info
Ta5d6ff markup: True
Ta5d6ff text: Ta5d6ff"Ta5d6ffYou can block calls from all other callers than contacts marked as trusted, by enabling the following option.Ta5d6ff"
Ta5d6ff size_hint_y: None
Ta5d6ff text_size: self.width, None
Ta5d6ff height: self.texture_size[1]
Ta5d6ff padding: [dp(0), dp(16), dp(0), dp(16)]

Ta5d6ff MDBoxLayout:
Ta5d6ff orientation: Ta5d6ff"Ta5d6ffhorizontalTa5d6ff"
Ta5d6ff padding: [0,0,dp(24),0]
Ta5d6ff size_hint_y: None
Ta5d6ff height: dp(48)
Ta5d6ff
Ta5d6ff MDLabel:
Ta5d6ff text: Ta5d6ff"Ta5d6ffBlock non-trusted callersTa5d6ff"
Ta5d6ff font_style: Ta5d6ff"Ta5d6ffH6Ta5d6ff"

Ta5d6ff MDSwitch:
Ta5d6ff id: voice_trusted_only
Ta5d6ff pos_hint: Ta5d6ff{Ta5d6ff"Ta5d6ffcenter_yTa5d6ff"Ta5d6ff: 0.3}
Ta5d6ff active: False

Ta5d6ff MDBoxLayout:
Ta5d6ff orientation: Ta5d6ff"Ta5d6ffhorizontalTa5d6ff"
Ta5d6ff padding: [0,0,dp(24),0]
Ta5d6ff size_hint_y: None
Ta5d6ff height: dp(48)
Ta5d6ff
Ta5d6ff MDLabel:
Ta5d6ff text: Ta5d6ff"Ta5d6ffLow-latency outputTa5d6ff"
Ta5d6ff font_style: Ta5d6ff"Ta5d6ffH6Ta5d6ff"

Ta5d6ff MDSwitch:
Ta5d6ff id: voice_low_latency
Ta5d6ff pos_hint: Ta5d6ff{Ta5d6ff"Ta5d6ffcenter_yTa5d6ff"Ta5d6ff: 0.3}
Ta5d6ff active: False

Ta5d6ff MDLabel:
Ta5d6ff text: Ta5d6ff"Ta5d6ffAudio DevicesTa5d6ff"
Ta5d6ff font_style: Ta5d6ff"Ta5d6ffH6Ta5d6ff"
Ta5d6ff padding: [dp(0), dp(96), dp(0), dp(12)]

Ta5d6ff MDLabel:
Ta5d6ff id: voice_settings_info
Ta5d6ff markup: True
Ta5d6ff text: Ta5d6ff"Ta5d6ffYou can configure which audio devices Sideband will use for voice calls, by selecting either the system default device, or specific audio devices available.Ta5d6ff"
Ta5d6ff size_hint_y: None
Ta5d6ff text_size: self.width, None
Ta5d6ff height: self.texture_size[1]
Ta5d6ff padding: [dp(0), dp(64), dp(0), dp(32)]

Ta5d6ff MDLabel:
Ta5d6ff text: Ta5d6ff"Ta5d6ff[b]Output[/b]Ta5d6ff"
Ta5d6ff font_size: dp(18)
Ta5d6ff markup: True

Ta5d6ff MDBoxLayout:
Ta5d6ff id: output_devices
Ta5d6ff orientation: Ta5d6ff"Ta5d6ffverticalTa5d6ff"
Ta5d6ff spacing: Ta5d6ff"Ta5d6ff12dpTa5d6ff"
Ta5d6ff size_hint_y: None
Ta5d6ff height: self.minimum_height
Ta5d6ff padding: [dp(0), dp(24), dp(0), dp(48)]

Ta5d6ff # MDRectangleFlatIconButton:
Ta5d6ff # id: output_default_button
Ta5d6ff # text: Ta5d6ff"Ta5d6ffSystem DefaultTa5d6ff"
Ta5d6ff # padding: [dp(0), dp(14), dp(0), dp(14)]
Ta5d6ff # icon_size: dp(24)
Ta5d6ff # font_size: dp(16)
Ta5d6ff # size_hint: [1.0, None]
Ta5d6ff # on_release: root.delegate.output_device_action(self)
Ta5d6ff # disabled: False

Ta5d6ff MDLabel:
Ta5d6ff text: Ta5d6ff"Ta5d6ff[b]Input[/b]Ta5d6ff"
Ta5d6ff font_size: dp(18)
Ta5d6ff markup: True

Ta5d6ff MDBoxLayout:
Ta5d6ff id: input_devices
Ta5d6ff orientation: Ta5d6ff"Ta5d6ffverticalTa5d6ff"
Ta5d6ff spacing: Ta5d6ff"Ta5d6ff12dpTa5d6ff"
Ta5d6ff size_hint_y: None
Ta5d6ff height: self.minimum_height
Ta5d6ff padding: [dp(0), dp(24), dp(0), dp(48)]

Ta5d6ff MDLabel:
Ta5d6ff text: Ta5d6ff"Ta5d6ff[b]Ringer[/b]Ta5d6ff"
Ta5d6ff font_size: dp(18)
Ta5d6ff markup: True

Ta5d6ff MDBoxLayout:
Ta5d6ff id: ringer_devices
Ta5d6ff orientation: Ta5d6ff"Ta5d6ffverticalTa5d6ff"
Ta5d6ff spacing: Ta5d6ff"Ta5d6ff12dpTa5d6ff"
Ta5d6ff size_hint_y: None
Ta5d6ff height: self.minimum_height
Ta5d6ff padding: [dp(0), dp(24), dp(0), dp(48)]

Ta5d6ff"""


──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────